XPath 1.0: поиск количества узлов перед указанным узлом

Я знаком с использованием предыдущих осей в XSLT для нахождения определения количества предыдущих элементов с учетом текущего контекста. Однако я не вижу способа сделать то же самое, учитывая узел, который я сохранил в переменной. Например:

<xsl:variable name="matchedBook" select="book[text()='The Hobbit']"/>
<xsl:variable name="precedingBookCount" select="count(???)"/>

Учитывая следующий XML, precedingBookCount должно быть равно 3.

<available>
    <book>Lord of the Rings</book>
    <book>The Hunger Games</book>
</available>
<purchased>
    <book>Ready Player One</book>
    <book>The Hobbit</book>
    <book>Lord of the Flies</book>
</purchased>

Я вижу в XPath 2.0, что есть оператор NodeComp << что я мог бы использовать, но это не присутствует в XPath 1.0.

Как я могу сделать это в XPath 1.0 тогда?

1 ответ

Решение

<xsl:variable name="precedingBookCount" select="count($matchedBook/preceding-sibling::book | $matchedBook/preceding::book)"/> следует сделать.

На самом деле достаточно сделать <xsl:variable name="precedingBookCount" select="count($matchedBook/preceding::book)"/>,

Другие вопросы по тегам