转换Xsl时如何确定节点是否存在?

时间:2012-02-14 10:07:02

标签: xml xslt

如何确定输入xml中是否存在给定节点?

如果节点存在,我想使用reportAuthor1的值,否则我会使用reportAuthor的值。我尝试使用if和else失败了。

 <xsl:choose>
 <xsl:when test="reportAuthor1=''">
 <xsl:value-of select="reportAuthor"/>
 </xsl:when>
 <xsl:otherwise>
 <xsl:value-of select="reportAuthor1"/>
 </xsl:otherwise>
 </xsl:choose>

3 个答案:

答案 0 :(得分:5)

使用not()检查节点是否完全不存在:

<xsl:choose>  
  <xsl:when test="not(reportAuthor1)">  
    <xsl:value-of select="reportAuthor"/>
  </xsl:when>  
  <xsl:otherwise>  
    <xsl:value-of select="reportAuthor1"/>  
  </xsl:otherwise>  
</xsl:choose> 

答案 1 :(得分:3)

这可能是最简单,最短的单行XPath表达式。使用

<xsl:value-of select="reportAuthor1 | reportAuthor[not(reportAuthor1)]"/>

答案 2 :(得分:1)

在这种特定情况下,您也可以写

<xsl:value-of select="reportAuthor1 | reportAuthor"/>

|返回XPath查询从此运算符的左侧和右侧返回的集合的并集,<xsl:value-of select="somequery"/>将向集合中的第一个节点的值发送有些人回来了。因此,如果同时设置了reportAuthor1reportAuthor,则会输出reportAuthor1的值;如果仅设置了reportAuthor,则会输出reportOutput的值。