使用XSLT,我需要从XML文件找到 tag 元素才能开始进行通缉的转换。 tag 元素通常是根元素。
<tag>
...
</tag>
但是,XML文件的新集合到达,其中一些文件在其他地方具有 tag 元素。(其位置因文件而异)
<a>
<b>
<tag>
...
</tag>
</b>
</a>
我想知道是否有可能获得 tag 的完整路径/名称并将其存储到变量中,因此我可以使用 $ $ tagpath 而不是/a/b/tag 。我尝试使用name()函数,但它仅返回元素名称(tag)。
谢谢!
根据上面的注释,要找到tag
元素,无论位置如何,您都可以使用\tag
。
如果您需要此元素的完整路径,则可以在此处使用建议的解决方案:如何在XSLT中输出当前元素路径?
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="text()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<xsl:template match="//tag">
<xsl:call-template name="genPath" />
</xsl:template>
<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>
</xsl:stylesheet>
您可以在此处看到一个示例:http://fiddle.frameless.io/