* +1000 *
Используйте
/*/daughter[@state = 'nice'][1]
|
/*/daughter[@state = 'nice'][1]
/following-sibling::daughter[@state='naughty'] [1]
Выбирает пару первой хорошей дочери и ее ближайшей непослушной дочери.
Чтобы выбрать вторую такую пару, используйте:
/*/daughter[@state = 'nice'][2]
|
/*/daughter[@state = 'nice'][2]
/following-sibling::daughter[@state='naughty'] [1]
... и т. Д.
Обратите внимание , что эти выражения не гарантируют, что узел будет вообще выбран - возможно, нет элементов daughter
, или не каждый элемент nice daughter
может иметь следующий брат daughter
элемент, который непослушен.
Если гарантируется, что в документе порядок из daughter
элементов строго ('nice'
, 'naughty
), то можно использовать очень простое выражение XPath для получения всех пар:
/ * / daughter [@state = 'nice' или @state = 'naughty']
Выбирает все элементы daughter
, которые являются дочерними элементами верхнего элемента и имеют чередующийся атрибут состояния со значениями: nice, naughty, nice, naughty,
...
Если используемый XPath API получает их в массив объектов , то для каждого четного k
пара дочерних элементов входит в k-й и (k + 1) -й члены этого массива.