XPath для выбора дочерней заметки из списка заметок и объединения всех текстовых узлов - PullRequest
0 голосов
/ 10 июля 2020
 <categoryPath>
            <category>
                <id>01</id>
                <name>one</name>
            </category>
            <category>
                <id>02</id>
                <name>two</name>
            </category>
            <category>
                <id>03</id>
                <name>three</name>
            </category>
            <category>
                <id>04</id>
                <name>four</name>
            </category>
  </categoryPath>

У меня есть структура XML, как показано выше. Может ли кто-нибудь помочь мне, как написать XPath, который может дать результат ниже? Обратите внимание, что количество узлов категории будет динамическим c, а значения могут быть любыми. XPath должен учитывать любое количество доступных элементов категории (не фиксировано).

один -> два -> три -> четыре

Ответы [ 2 ]

1 голос
/ 11 июля 2020

С XPath 2.0 string-join(//category/name,",") выведет: one,two,three,four, но я не уверен, что ваше программное обеспечение поддерживает это.

С XPath 1.0, поскольку вы не знаете количество элементов category , вы можете написать выражение, которое поддерживает до 10 элементов (добавьте больше, если хотите):

substring-before(concat(//category[1]//name,",",//category[2]//name,",",//category[3]//name,",",//category[4]//name,",",//category[5]//name,",",//category[6]//name,",",//category[7]//name,",",//category[8]//name,",",//category[9]//name,",",//category[10]//name),",,")

Вывод: one,two,three,four

1 голос
/ 10 июля 2020

Предполагая, что имена тегов <category> и <name> не меняются, тогда это выражение

categoryPath//category//name/text()

должно вывести

one
two
three
four
...