我正在尝试编写一个xsl,它将返回element的xpaths及其直接子节点
示例XML
<level0>
<level1>
<level2>
<level3>
<level4/>
</level3>
<level3/>
</level2>
</level1>
</level0>
例如,如果我想返回level2
的xpath,那么它应该返回
/level0/level1/level2
/level0/level1/level2/level3
/level0/level1/level2/level3
我的XSL
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" media-type="text/plain"/>
<xsl:template match="@*|comment()|text()|processing-instruction()"/>
<xsl:template match="//level2|//level2/*">
<xsl:for-each select="ancestor-or-self::*">
<xsl:value-of select="concat('/',name(.))"/>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
在这个xsl中,我试图匹配//level2|//level2/*
xpath的模板(它应返回所需的结果)。但是,我只是
/level0/level1/level2
如何获得所需的结果?
答案 0 :(得分:2)
只需在<xsl:apply-templates/>
<xsl:text>
</xsl:text>
即可
<xsl:template match="//level2|//level2/*">
<xsl:for-each select="ancestor-or-self::*">
<xsl:value-of select="concat('/',name(.))"/>
</xsl:for-each>
<xsl:text>
</xsl:text>
<xsl:apply-templates/>
</xsl:template>
<强>输出强>
/level0/level1/level2
/level0/level1/level2/level3
/level0/level1/level2/level3