如何在XSLT中检查XML值是否为nil

Sti*_*ack 6 xml xslt null xml-nil

在XML文档中,我有一些地址数据..

<zip>08001</zip>
<zipPlus xsi:nil="true" />
Run Code Online (Sandbox Code Playgroud)

<zip>08002</zip>
<zipPlus>4512</zipPlus>
Run Code Online (Sandbox Code Playgroud)

如果有值要使用,只想打扰显示zip plus值.(出于这个例子的目的,我不在乎它是否是正确的zip加号格式)

试图在XSLT中使用以下代码段似乎无法正常工作,我认为这与我如何检查xsl:nil值有关

<EmployerZipCode>
      <xsl:value-of select="zip"/>
      <xsl:if test="zipPlus != @xsl:nil">
        <xsl:value-of select="'-'"/>
        <xsl:value-of select="zipPlus"/>
      </xsl:if>
      <xsl:value-of select="$sepChar"/> <!--this is a comma -->
</EmployerZipCode>
Run Code Online (Sandbox Code Playgroud)

我得到的结果总是如此

08001,
08002,
Run Code Online (Sandbox Code Playgroud)

08001,
08002-4512,
Run Code Online (Sandbox Code Playgroud)

在XSLT中检查nil-led元素的正确方法是什么?有没有其他方法来解决这个问题,并获得我想要的结果?

Jim*_*son 6

<xsl:if test="not(zipPlus/@xsi:nil='true')">
Run Code Online (Sandbox Code Playgroud)


Mic*_*Kay 5

在XSLT 2.0中,由于我从未完全理解的原因,有一个自定义函数

test="not(nilled(zipPlus))"
Run Code Online (Sandbox Code Playgroud)


Sti*_*ack 3

经过更多测试后,没有给出涉及检查 nil 属性的可靠答案。

我不得不求助于使用 string-length() 来获得我需要的结果。

<EmployerZipCode>
  <xsl:value-of select="zip"/>
  <xsl:if test="string-length(zipPlus) &gt; 0">
    <xsl:value-of select="'-'"/>
    <xsl:value-of select="zipPlus"/>
  </xsl:if>
  <xsl:value-of select="$sepChar"/>
</EmployerZipCode>
Run Code Online (Sandbox Code Playgroud)