1. Главная
  2. Функции XPath
  3. position()

position XPath

Функция position возвращает позицию контекста — число, показывающее порядковый номер контекстного узла в обрабатываемом множестве.

Синтаксис

XPath 1.0

number position()

Спецификация

Описание и примеры

Пример

В этом примере мы будем заменять все элементы элементами вида

<element name="..." position="...">
    ...
</element>

где атрибут name будет содержать имя, a position — через дробь позицию элемента в контексте и размер контекста.

Листинг 6.7. Входящий документ

<a>
    <b/>
    <c/>
    <d>
        <e/>
        <f/>
    </d>
</a>

Листинг 6.8. Преобразование

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output indent="yes"/>
    <xsl:strip-space elements="*"/>
    <xsl:template match="*">
        <element name="{name()}" pos="{position()}/{last()}">
            <xsl:apply-templates/>
        </element>
    </xsl:template>
</xsl:stylesheet>

Листинг 6.9. Выходящий документ

<element name="a" pos="1/1">
    <element name="b" pos="1/3"/>
    <element name="c" pos="2/3"/>
    <element name="d" pos="3/3">
        <element name="e" pos="1/2"/>
        <element name="f" pos="2/2"/>
    </element>
</element>

Отметим, что если бы мы не удаляли лишние пробельные символы во входящем документе при помощи элемента xsl:strip-space, в контексте преобразования учитывались бы также и текстовые узлы, которые им соответствуют. Выходящий документ без этого элемента имел бы следующий вид:

<element name="a" pos="1/1">
    <element name="b" pos="2/7"/>
    <element name="c" pos="4/7"/>
    <element name="d" pos="6/7">
        <element name="e" pos="2/5"/>
        <element name="f" pos="4/5"/>
    </element>
</element>