XPath - определить положение элемента - PullRequest
2 голосов
/ 02 сентября 2011

Я хочу создать индекс (определить позицию в XML) для каждой таблицы, но проблема в том, что таблицы имеют разную глубину. Я планирую обработать XML с преобразованием XSLT в FO. Есть идеи, как это сделать?

Sample XML

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

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

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

Ответы [ 2 ]

5 голосов
/ 02 сентября 2011

@ Решение Томалака не совсем корректно и даст неправильный результат в случае, когда есть вложенные таблицы.

Причина этого в том, что XPath preceding и *Оси 1006 * не перекрываются.

Одно правильное выражение 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>
4 голосов
/ 02 сентября 2011

Это будет нумеровать ваши таблицы последовательно, начиная с 1.

<xsl:template match="table">
  <table id="tbl_{count(preceding::table) + 1}">
    <!-- further processing -->
  </table>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...