Выражение Xpath, чтобы получить ниже вывод от ввода XML - PullRequest
0 голосов
/ 28 мая 2018

Входной XML:

<root><timestamp>2015-12-2</timestamp><record><e1>123</e1><e2>12366t6</e2></record><record><e1>123</e1><e2>0000</e2></record></root>

Выходной XML:

<root><timestamp>2015-12-2</timestamp><record><e1>123</e1><e2>0000</e2></record></root>

Может ли кто-нибудь помочь найти выражение XPath, которое может бытьиспользуется для достижения вышеуказанного выхода?Я пробовал $body/root[/record[2]], но он не работает.

1 Ответ

0 голосов
/ 28 мая 2018

Квадратные скобки [] содержат предикат (аналогично WHERE в запросе SQL).

Ваше выражение $body/root[/record[2]] можно принять за

  • Начните с body
  • , возьмите любое root, но только если на позиции 2

вы, вероятно, хотите $body/root/record[2], то есть

  • Начать с body
  • взять любое root
  • взять любое record, но вернуть только второе record

Если вы не можете указать фиксированную позицию, вы можете сделать что-то вроде этого:

$body/root/record[(e2/text())[1]='0000']

То есть

  • Начать с body
  • взять любое root
  • взять любое record, но вернуть только те, для которых e2 имеет заданное значение

ОБНОВЛЕНИЕ: Вернуться к вашей проблеме

Вы хотите получить два разных компонента из вашего XML.Вам придется использовать два XPath выражения

Вы можете использовать что-то вроде этого

/root/timestamp | /root/record[2]

или это

<root>
{/root/timestamp[1]}
{/root/record[2]}
</root>
...