使用XSLT,我需要从XML文件中找到标记元素,以开始进行所需的转换。 标记元素通常是根元素。
<tag>
...
</tag>
但是,新的XML文件集合到了,其中一些在其他地方有标记元素。 (其位置因文件而异)
<a>
<b>
<tag>
...
</tag>
</b>
</a>
我想知道是否可以获取标记的完整路径/名称并将其存储到变量中,因此我可以使用 $ tagPath 而不是< EM> / A / b /标签。我尝试使用name()函数,但它只返回元素名称(标记)。
谢谢!
答案 0 :(得分:1)
根据上述评论,无论位置如何,要查找tag
元素,您只需使用\\tag
。
如果您需要此元素的完整路径,可以使用此处提出的解决方案:How do you output the current element path in 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/