Помогите превратить результат xpath в форматированную строку - PullRequest
2 голосов
/ 03 июня 2011

Я пытаюсь разобрать канал XML с помощью xpath.Фид содержит категории, которые выглядят следующим образом:

<categories>
<category id="6">Category 6</category>
<category id="12">Category 12</category>
<category id="19">Category 19</category>
</categories>

В настоящее время я использую путь «категории», чтобы выбрать все дочерние узлы, для которых возвращается «Категория 6Категория 12Категория 19» в строковом формате.Я бы хотел, чтобы результат был похож на «Категория 6, Категория 12, Категория 19».Как мне этого добиться?Я посмотрел на функции xpath, но, похоже, ничего не подходит для этой задачи.

Я использую это с модулем синтаксического анализа xpath Drupal

Ответы [ 3 ]

2 голосов
/ 03 июня 2011

Чистый XPath:

concat(categories/category[id="6"],', ',
       categories/category[id="12"],', ',
       categories/category[id="19"])

Но он не будет очень полезным, если вам нужно что-то динамическое, я имею в виду, если вы не знаете categories детей априори .

Для динамического выделения используйте:

string-join(categories/*,', ')

или

string-join(/categories/*,', ')

в зависимости от контекста.

1 голос
/ 03 июня 2011

В общем случае статически неизвестного XML-документа желаемый результат не может быть получен с использованием только чистого XPath 1.0 - необходима некоторая помощь от языка программирования, на котором он размещен.

Простое и чистое решение XPath 2.0 для этого: :

string-join(/*/*,', ')
1 голос
/ 03 июня 2011

Как правило, вы должны использовать / category / category xpath для выбора узлов категории, а затем перечислить набор узлов и отобразить содержимое каждого узла, за которым следует запятая (кроме последнего узла).Точный код зависит от технологии, которую вы используете.

...