2011-09-02 114 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:可能你有興趣閱讀我的答案。 –