如何在转换Xsl时确定节点是否存在?
如何确定给定节点是否存在于我的输入xml中?如何在转换Xsl时确定节点是否存在?
如果节点存在,我想使用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>
使用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>
在这种特殊情况下,你还可以写
<xsl:value-of select="reportAuthor1 | reportAuthor"/>
|
返回集合的并集由该运算符的左侧和右侧的XPath查询返回,并且<xsl:value-of select="somequery"/>
将向输出发送第一个节点的值由somequery返回的集合。因此,如果reportAuthor1
和reportAuthor
都被设置,它将输出值reportAuthor1
;如果只设置了reportAuthor
,则会输出值reportOutput
。
感谢您的快速回复。我尝试了以前的解决方案。我也试试这个。 – udaya726 2012-02-14 11:57:58
Aaah,我的评论最初被解析器搞砸了,一定不要忘记空行!我的代码示例与Dimitre Novatchev的答案类似,尽管速度较慢(即使有'reportAuthor1'也会计算'reportAuthor')。另一方面,XSLT处理器应该足够聪明,在这种情况下不要计算'reportAuthor'。 – penartur 2012-02-14 13:25:39
使用联合运算符而不是'
这可能是最简单和最短的单行XPath表达式。使用:
<xsl:value-of select="reportAuthor1 | reportAuthor[not(reportAuthor1)]"/>
感谢这对我有用。 – udaya726 2012-02-14 11:57:35