gpt4 book ai didi

xslt - XSl :Variable - Condition to check whether value exist

转载 作者:行者123 更新时间:2023-12-01 04:45:36 27 4
gpt4 key购买 nike

使用 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> 下面的子节点.如果 <RootTag>不存在,那么 DOC_TYPE 应该是我的 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>

其他几点说明:

  • 这个:'./RootTag'是多余的。默认情况下,不以斜杠开头的每个 XPath 都是相对的,所以说 'RootTag'够了
  • 这个:<xsl:value-of select="name(*[1])"/>已经产生了一个字符串(名称根据定义是字符串),所以没有必要做 <xsl:if test="string($DOC_TYPE) = ''"> , 一个简单的 <xsl:if test="$DOC_TYPE = ''">够了
  • 要检查一个节点是否存在,只需通过 test="..." 中的 XPath 选择它表达式 - 任何非空节点集的计算结果为 true
  • XSLT 有严格的范围规则。变量仅在其父元素内有效。您的第二个变量(<xsl:if> 中的那个)将立即超出范围(意味着在 </xsl:if> 中)。

关于xslt - XSl :Variable - Condition to check whether value exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1487613/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com