Пример того как изменяется контекст во время выполнения XPath запроса

Может кто-нибудь объяснить пошагово как изменяется контекст при выполнении XPath выражения? Особенно интересует как вычисляется СontextPosition и ContextSize. Есть такой запрос: //item[2].

Выполняется на таком документе:

<root>
  <node>
    <item/>
    <item/>
    <item/>
  </node>
  <item/>
  <node>
    <item/>
    <item/>
    <item/>
  </node>
  <item/>
</root>

Не могу понять как вычисляется позиция элемента во время выполнения.


Ответы (1 шт):

Автор решения: Alexander Petrov

Чтобы было легче понимать, о каких именно элементах речь, изменим xml следующим образом:

<root>  
  <node>
    <item>1</item>
    <item>2</item>
    <item>3</item>
  </node>
  <item>4</item>  
  <node>
    <item>5</item>
    <item>6</item>
    <item>7</item>
  </node>
  <item>8</item>  
</root>

Путь // проходит по всем узлам. Если точкой отсчёта является корень xml, то элементы со значениями 1, 2, 3 составят первый node-set. Вторым элементом [2] будет 2.
Второй node-set - элементы со значениями 5, 6, 7. Второй элемент среди них: 6.
Элементы со значениями 4 и 8 образуют ещё один node-set. Номер [2] - это 8.

→ Ссылка