2011-09-02 115 views
2

我想为每个表创建一个索引(确定XML中的位置),但问题是这些表的深度不同。我计划通过将XSLT转换为FO来处理XML。我任何想法如何做到这一点?XPath - 确定元素位置

Sample XML

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

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

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

你想要什么样的指标?你想要的输出是什么? – MattH

+0

@MattH整个XML中的第一个表应该有1个,第二个应该有2个,依此类推。就像页面编号一样 - 只应用于表格。我想打印此表格是3的1或类似的东西。 – user219882

+1

您打算如何处理此文档?如果您正在寻找XLST解决方案,我建议您适当地标记您的问题。 – MattH

回答

5

开始@托默勒格的解决方案并不完全正确以及何时会的情况下产生错误的结果有是嵌套表。

原因是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> 
+0

+1你说得对!我没有想到这一点。 – Tomalak

+0

@_Tomalak:别担心,太多了。有时会出现这种情况。 –

4

这将连续编号的表格,从1

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

@_Tomalak:可能你有兴趣阅读我的答案。 –