XPath - 确定元素位置

时间:2011-09-02 08:35:17

标签: xml xslt xpath

我想为每个表创建一个索引(确定XML中的位置),但问题是这些表的深度不同。我计划使用XSLT转换处理XML到FO。我有什么想法怎么做?

Sample XML

<document>
    <table> ... </table>

    <section>
        <table> ... </table>

        <subsection>
            <table> ... </table>
        </subsection>
    </section>
</document>

2 个答案:

答案 0 :(得分:5)

@ Tomalak的解决方案不完全正确,并且在存在嵌套表的情况下会产生错误的结果。

原因是XPath precedingancestor轴不重叠。

提供所需数字的一个正确的XPath表达式为:

count(ancestor::table | preceding::table) + 1

所以,请使用

<xsl:template match="table">
    <table id="tbl_{count(ancestor::table | preceding::table) + 1}">
        <!-- further processing -->
    </table>
</xsl:template>

答案 1 :(得分:4)

这将从1开始连续对表格进行编号。

<xsl:template match="table">
  <table id="tbl_{count(preceding::table) + 1}">
    <!-- further processing -->
  </table>
</xsl:template>