Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

XPath - determine the element position

Tags:

xml

xslt

xpath

I want to create an index (determine the position in the XML) for every table but the problem is that the tables are in different depth. I plan to process the XML with XSLT transformation to FO. I Any ideas how to do this?

Sample XML

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

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

        <subsection>
            <table> ... </table>
        </subsection>
    </section>
</document>
like image 874
user219882 Avatar asked Mar 19 '26 10:03

user219882


1 Answers

@Tomalak's solution isn't completely correct and will produce wrong result in the case when there are nested tables.

The reason for this is that the XPath preceding and ancestor axes are non-overlapping.

One correct XPath expression that gives the wanted number is:

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

So, use:

<xsl:template match="table">
    <table id="tbl_{count(ancestor::table | preceding::table) + 1}">
        <!-- further processing -->
    </table>
</xsl:template>
like image 86
Dimitre Novatchev Avatar answered Mar 22 '26 12:03

Dimitre Novatchev