使用XML:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<A>
<B>
<C>
<Name>Bob</Name>
</C>
<D>
<Operation>Yes</Operation>
<E>
<Operation>No</Operation>
</E>
</D>
</B>
</A>
</Root>
我有XSLT可以产生文本输出:
/根目录/ A / B / C /名称
/根/ A / B / D /操作
/ Root / A / B / D / E / Operation
问题: 最深的文本节点是/ Root / A / B / D / E / Operation。
在生成上面的输出之前,我希望能够得到数字5(前面具有最大/最大元素级别数的文本节点。
因此,它应该适用于任何XML文档。元素名称未知。
答案 0 :(得分:1)
XSLT 3样式表
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="let $leaf-elements := //*[not(*)],
$max-anc := max($leaf-elements/count(ancestor::*))
return ($max-anc, $leaf-elements!string-join(ancestor-or-self::*/name(), '/'))" separator=" "/>
</xsl:template>
</xsl:stylesheet>
对照您的示例输入输出
5
Root/A/B/C/Name
Root/A/B/D/Operation
Root/A/B/D/E/Operation