查找前面元素数量最多的文本节点

时间:2018-07-10 12:55:59

标签: xslt

使用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文档。元素名称未知。

1 个答案:

答案 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="&#10;"/>
  </xsl:template>

</xsl:stylesheet>

对照您的示例输入输出

5
Root/A/B/C/Name
Root/A/B/D/Operation
Root/A/B/D/E/Operation

在线示例https://xsltfiddle.liberty-development.net/6qVRKwh