gpt4 book ai didi

xslt - XSLT和Xpath语法>如何在“外部”范围内引用元素

转载 作者:行者123 更新时间:2023-12-03 16:57:58 25 4
gpt4 key购买 nike

我有以下工作正常100%。
但是为了满足我的好奇心...有没有一种方法可以在不声明currentID变量的情况下实现相同的效果?
有什么方法可以从Xpath“测试”条件中引用它吗?

条件中的xpath查询必须引用2个@id属性,以查看它们是否匹配。


'当前'@id
每个“祖先” @id


这是代码:

<xsl:variable name="currentID" select="@id" />
<xsl:attribute name="class">
<xsl:if test="count($currentPage/ancestor::node [@id = $currentID])&gt;0">descendant-selected </xsl:if>
</xsl:attribute>

最佳答案

由于您从上下文节点中选择$currentID,因此:

<xsl:variable name="currentID" select="@id" />


您可以使用 current()函数,该函数始终引用XSLT上下文节点:

<xsl:attribute name="class">
<xsl:if test="count($currentPage/ancestor::node[@id = current()/@id) &gt; 0]">
<xsl:text>descendant-selected </xsl:text>
</xsl:if>
</xsl:attribute>


这样,您就不需要变量。

其他一些注意事项:


我建议使用如上所示的 <xsl:text>。这使您有更多的自由来格式化代码并避免行太长。
您无需执行 count() > 0,只需选择节点即可。如果不存在,则返回空节点集。它总是评估为false,而非空节点集总是评估为true。


如果您在XSL样式表中按 @id定期引用节点,则 <xsl:key>会有所帮助:

<xsl:key name="kNodeById" match="node" use="@id" />

<!-- ... -->

<xsl:attribute name="class">
<xsl:if test="key('kNodeById', @id)">
<xsl:text>descendant-selected </xsl:text>
</xsl:if>
</xsl:attribute>


上面的内容不需要 current(),因为在XPath谓词之外,上下文不变。另外,我不 count()节点,因为这是多余的(如所解释)。

关于xslt - XSLT和Xpath语法>如何在“外部”范围内引用元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1843693/

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