Что мне нужно, это значение <d>
, если <f>
содержит "f"
Это просто:
//f[contains(. 'f')]/../d
ноМне нужно это как в одном массиве
Это не так просто.Вы можете сделать это:
//f[contains(. 'f')]/../*[self::f or self::d]
, который даст вам список <f>
s и <d>
s, где <f>
содержит "f"
, но они не будут "сгруппированы" в пары.Ничего из того, что вы можете выбрать с помощью одного выражения XPath, не будет - списки плоских узлов - это единственное, что XPath может вам дать.В зависимости от того, насколько регулярны ваши входные данные, это может быть достаточно.
Если вам нужен контекст «пар», разбейте операцию.Выберите все <c>
, где <f>
содержит "f"
:
//c[contains(f, 'f')]
и для каждого из них выберите <f>
и <d>
на втором шаге:
./*[self::f or self::d]
Обратите внимание, что XPath возвращает узлы в порядке документов.Если это не предсказуемо при вводе, выбирайте узлы индивидуально, а не одним выражением.