Xslt XSl:Variable-检查值是否存在的条件
使用XSLT1.0,如何检查变量中的值是否存在 我最初是从XML数据为变量赋值,然后需要检查它是否存在:Xslt XSl:Variable-检查值是否存在的条件,xslt,Xslt,使用XSLT1.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: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>
上述情况并没有如预期的那样起作用。我需要的是,如果我的数据中存在
,那么变量应该包含
下面的子节点。如果
不存在,则文档类型应该是我的XML数据中的第一个标记
感谢您的回复。只有您分配了它,它才会存在。没有理由去检验它的存在
另请参见您不能在XSLT中重新分配变量。变量是不可变的,不能更改其值。永远 这意味着您必须在变量声明中决定它将具有什么值:
<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>
其他一些注意事项:
- 此:
是冗余的。默认情况下,每个不以斜杠开头的XPath都是相对的,所以说”./RootTag“
就足够了'RootTag'
- 这:
已经产生了一个字符串(根据定义,名称就是字符串),因此不需要执行
,一个简单的
就足够了 - 要检查节点是否存在,只需通过XPath在
表达式中选择它-任何非空节点集的计算结果均为test=“…”
true
- XSLT有严格的范围规则。变量仅在其父元素中有效。您的第二个变量(在
中的变量)将立即超出范围(即位于
的右侧)
<xsl:variable name="DOC_TYPE">
<xsl:choose>
<xsl:when test="/RootTag"><xsl:value-of select="name(/RootTag/*[1])"></xsl:value-of></xsl:when>
<xsl:otherwise><xsl:value-of select="name(/*[1])"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
谢谢。但我的要求是,有时我得到这样的数据,然后我需要变量名作为顺序。有时我得到这样的数据,没有RootTag,那么我的变量也应该包含值。我如何做到这一点?在您的示例中,变量始终存在,可能是内容不同。但无论如何,既然吉姆·加里森的建议似乎对你有用,我相信你应该接受他的回答。非常感谢。我会尝试这种方式,如果我有问题,请告诉我。