如果xml元素没有值,则必须打印null值

时间:2017-10-03 15:26:59

标签: xml xslt

我应该为XML文档编写一个XSLT,如果它没有元素参数,XSLT必须考虑一个空值。输出必须是XML文档,其中原始xml文档中没有值的元素必须打印为<tagName>Null</tagName>

这是xml文档

<salesOrderRequest>
<invoiceNo>1245</invoiceNo>
<PizzaType/>
<Price>1099</Price>
<Discount>234</Discount>
</salesOrderRequest>

这是我的xslt

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XMLTransform">
 <xsl:template match="/">
  <xsl:for-each select="/salesOrderRequest">
   <xsl:value-of select="invoiceNo"/>
   <xsl:value-of select="PizzaType"/>
   <xsl:value-of select="Price"/>
   <xsl:value-of select="Discount"/>
  </xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

<salesOrderRequest>
    <invoiceNo>1245</invoiceNo>
    <PizzaType>Null</PizzaType>
    <Price>1099</Price>
    <Discount>234</Discount>
    </salesOrderRequest>

2 个答案:

答案 0 :(得分:1)

在XSLT 2.0或3.0中,

<xsl:value-of select="if (normalize-space(PizzaType))
    then PizzaType
    else 'Null' "/>

或(如果您不想接受<PizzaType> </PizzaType>等同于<PizzaType/>

<xsl:value-of select="if (PizzaType ne '')
    then PizzaType
    else 'Null' "/>

<xsl:value-of select="(PizzaType[. ne ''], 'Null')[1]"/>

如果您需要XSLT 1.0中的解决方案,则应该以这种方式标记您的问题。

答案 1 :(得分:1)

尝试:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XMLTransform">

  <xsl:template match="/">
    <xsl:apply-templates select="/salesOrderRequest/*"/>
  </xsl:template>

  <xsl:template match="salesOrderRequest/*" priority="1">
     <xsl:value-of select="."/>
  </xsl:template>

  <xsl:template match="salesOrderRequest/*[.='']" priority="2">
     <xsl:text>null</xsl:text>
  </xsl:template>

</xsl:stylesheet>