使用XSLT 1.0,如何检查变量中的值是否存在?
我最初从 XML 数据将值分配给变量,然后需要检查它是否存在:
<xsl:variable name="DOC_TYPE">
<xsl:value-of select="name(./RootTag/*[1])"/>
</xsl:variable>
<xsl:if test="string($DOC_TYPE) = ''">
<xsl:variable name="DOC_TYPE">
<xsl:value-of select="name(./*[1])"/>
</xsl:variable>
</xsl:if>
上面的内容没有按预期工作。我需要的是如果<RootTag>
存在于我的数据中,那么该变量应该包含下面的子节点<RootTag>
. If <RootTag>
不存在,那么 DOC_TYPE 应该是我的 XML 数据中的第一个标签。
感谢您的答复。
您无法在 XSLT 中重新分配变量。变量是不可变的,你不能改变它们的值。曾经。
这意味着你必须决定within变量声明它将具有什么值:
<xsl:variable name="DOC_TYPE">
<xsl:choose>
<xsl:when test="RootTag">
<xsl:value-of select="name(RootTag/*[1])" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="name(*[1])" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
其他一些注意事项:
- this:
'./RootTag'
是多余的。默认情况下,每个不以斜杠开头的 XPath 都是相对的,所以说'RootTag'
足够
- this:
<xsl:value-of select="name(*[1])"/>
已经产生一个字符串(名称根据定义是字符串),所以不需要做<xsl:if test="string($DOC_TYPE) = ''">
, 一个简单的<xsl:if test="$DOC_TYPE = ''">
就够了
- 要检查节点是否存在,只需通过 XPath 在
test="..."
表达式 - 任何非空节点集的计算结果为true
- XSLT 具有严格的范围规则。变量仅在其父元素内有效。你的第二个变量(在
<xsl:if>
) 会超出范围立即地(意思是就在</xsl:if>
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)