xslt-1.0深度优先顺序遍历编号

xslt-1.0深度优先顺序遍历编号,xslt,xslt-1.0,Xslt,Xslt 1.0,我正在寻找一种身份转换,它向每个节点添加一个排序属性。我希望每个节点的显式文档位置都是整数 我相信所需的顺序(如中所示)是默认顺序,因为子体轴上的选择会生成正确的顺序号: 了解xsl:number,它功能强大: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="@* | node()"> <xsl:copy&

我正在寻找一种身份转换,它向每个节点添加一个排序属性。我希望每个节点的显式文档位置都是整数

我相信所需的顺序(如中所示)是默认顺序,因为子体轴上的选择会生成正确的顺序号:


了解
xsl:number
,它功能强大:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="@* | node()">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="/*//*">
  <xsl:copy>
    <xsl:attribute name="doc_order">
      <xsl:number level="any" count="*" from="root"/>
    </xsl:attribute>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>


有关联机示例,请参阅。

能否提供正在处理的输入XML示例以及预期的输出?谢谢是的,谢谢你的邀请,好了!我刚刚读到:)事情是xsl:number在现实生活中的xml文件上复杂度爆炸(想想~minutes),它在每个节点上一次又一次地进行计算,我在寻找某种累加器这是一种观点,认为“xsl:number复杂度爆炸”是基于某个XSLT处理器的测量?至于累加器,它们来自XSLT 3.0。我在这里测量了xsltproc:xsltproc——计时ord.XSLT data.xml>/dev/null解析样式表ord.XSLT解析文档数据需要0毫秒。xml需要163毫秒应用样式表需要251082毫秒保存结果需要60毫秒同一文件上的标识转换需要463毫秒至少对我来说是有意义的,给定xsl:number的设计目的-它从祖先节点创建数字列表并格式化它们,然后累加器>我不确定我是否在这里使用已建立的命名,我看到了一种模式,其中您将遍历与在每次模板调用中递增的参数相结合。让我们看看其他人有什么建议作为答案或注释。或者,尝试一下``是否在xsltproc中表现更好。