我想知道,是否有办法确定 xslt 中给定源节点的路径。让我们假设以下源 XML 文件:
<one>
<two>
<three/>
<three this="true"/>
</two>
<two>
<three/>
</two>
</one>
我想要一个函数(自定义模板),对于具有属性 this="true" 的节点三,它会输出如下内容:“1,1,2” - 这意味着:从根开始进入第一个元素,然后到第一个元素,然后到第二个元素以到达此特定节点。
(这样做的目的是我希望对从源 XML 文档中的特定位置获取的内容具有唯一标识符,并将其转换为我想要的输出)
编辑:我发现了这个:
<xsl:template name="genPath">
<xsl:param name="prevPath"/>
<xsl:variable name="currPath" select="concat('/',name(),'[',
count(preceding-sibling::*[name() = name(current())])+1,']',$prevPath)"/>
<xsl:for-each select="parent::*">
<xsl:call-template name="genPath">
<xsl:with-param name="prevPath" select="$currPath"/>
</xsl:call-template>
</xsl:for-each>
<xsl:if test="not(parent::*)">
<xsl:value-of select="$currPath"/>
</xsl:if>
</xsl:template>
under:如何在 XSLT 中输出当前元素路径?
通过几处修改,这将输出我需要的内容:
<xsl:call-template name="genPath">
某处,但这种调用方式会输出到当前节点的路径。如何修改它以允许写入当前节点的特定子节点的路径?
就像是:
<xsl:call-template name="genPath" select="n1:tagname/n1:tagname2">
(我知道上面的语法不正确)