XQuery: возвращает значение элемента, а не самого элемента. - PullRequest
23 голосов
/ 20 июля 2009

У меня есть XML-документ, содержащий следующее

...
<foo>abc</foo>
...

Если я оцениваю

return $xml//foo

Я вернусь

<foo>abc</foo>

Есть ли способ получить просто abc вместо?

Ответы [ 5 ]

28 голосов
/ 20 июля 2009

Да, вам нужна функция text () для выбора дочернего текста:

return $xml/text()

Будьте осторожны, если у вас будет вложенная структура тегов внутри $ xml, потому что это будет только на один уровень глубины для текстовых узлов. Если вы хотите, чтобы все текстовые узлы были объединены, исключая другую структуру XML, это будет сделано сколь угодно глубоко:

return $xml//text()
16 голосов
/ 21 июля 2009

Используйте строковую функцию, чтобы получить строковое содержимое узла.

return string($xml)
8 голосов
/ 19 сентября 2009

Чтобы вернуть только данные внутри элемента, вы можете использовать:

return data($xml)
0 голосов
/ 15 декабря 2014

Пользователи OSB (служебная шина oracle) могут использовать следующую функцию.

fn-bea:serialize($xml)

0 голосов
/ 20 мая 2013

приведение к xs: строка {xs:string($xml/foo)}

...