xpath простой пример понимания

У меня есть этот xml-файл:

<?xml version="1.0" encoding="US-ASCII"?>
<?xml-stylesheet type="text/css" href="positions-zaehlweise.css"?>
<ul>
<li>A</li> 
<li>             
 <ol>
   <li>B</li>
   <li>C</li>
 </ol>
</li>
<li>D</li>
</ul>

и этот запрос xpath:

/child::ul/descendant-or-self::*/child::li[position()=1]

Я получаю от этого запроса: A и B.

но я почему-то не понимаю, как это делается. С /descendant-or-self он воспринимает как self A, верно? затем он идет вниз по списку и берет все. тогда как это сравнить, мое видение таково:

self             descendant
----------------------------
A,D                 B, C

я прав? может кто-нибудь объяснить мне вкратце, как это работает? спасибо в тоннах


person doniyor    schedule 28.07.2013    source источник


Ответы (1)


/child::ul возвращает ul.

descendant-or-self::* возвращает самого себя (снова ul) плюс всех его потомков (li-A, li-ol, ol, li-B, li-C, li-D).

child::li перемещается к дочерним элементам предыдущих элементов li, что означает li-A, li-ol и li-D для ul, andli-Bandli-Cforol`.

[position()=1] выбирает только тех, кто является первым таким потомком, то есть li-A и li-B.

person choroba    schedule 28.07.2013