xpath - получить первые 10 элементов выбранного набора - PullRequest
10 голосов
/ 21 января 2011

xml снова ..

Я хочу выбрать подмножество узлов (для целей нумерации страниц) из набора.

$nodes = $xml->query(//parent
                        /child[sex = 'male' 
                               and position() >= 10 
                               and position() < 21]);

Если я не ошибаюсь, то выбираются только дети мужского пола, которым от 10 до 20 лет.

мне нужно выбрать первых 10-20 (или 30-40) мужчин в наборе ...

уверен, что я новичок и делал это раньше, но сегодня пятница ...

та пип

Ответы [ 2 ]

27 голосов
/ 21 января 2011

Пусть условие положения работает с результирующим набором узлов вашего начального условия:

//parent/child[sex='male'][position() >= 10 and position() < 21]
5 голосов
/ 21 января 2011

Я хочу выбрать подмножество узлов (для целей нумерации страниц) из набора.

$nodes = $xml->query(//parent
                         /child[sex = 'male'
                                 and position() >= 10
                                 and position() < 21]); 

Если я не ошибаюсь, это позволит выбрать только детей мужского пола, которые находятся на 10-м месте.20-й ребенок.

Мне нужно выбрать первых 10-20 (или 30-40) мужчин в наборе ...

Вы являетесь error ...

//parent/child
           [sex = 'male'
          and 
           position() >= 10
          and 
           position() < 21
           ] 

Выбирает все элементы child (из любого элемента parent в документе XML), которые имеют дочерний элемент sex со значением sting "male"и это один из 10–20 child детей их родителей.

Таких элементов может быть только несколько, или вообще нет.

То, что вы хотите: :

  1. Выбирает все элементы child (из любого элемента parent в документе XML), которые имеютsex ребенок со значением жала "male"

  2. Из тех, которые выбраны в шаге 1 выше, выберите только тех, кто находится в положении от 10 до 20

Итак, для шага 1 :

//parent/child[sex = 'male']

и добавление шага 2 :

//parent/child[sex = 'male']
                [position() >= 10
               and 
                not(position() > 20
                ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...