XQuery: возвращаемое значение элемента, а не самого элемента

18

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

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

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

return $xml//foo

Я возвращаюсь

<foo>abc</foo>

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

    
задан kpozin 20.07.2009 в 20:51
источник

5 ответов

23

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

return $xml/text()

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

return $xml//text()
    
ответ дан Harold L 20.07.2009 в 20:54
источник
  • text () не является функцией. Это тест узла. Перед тем, как вы отправите текст () сумасшедшим, см. Сообщение Эвана Ленца «text () - это запах кода», а также сообщение Дэйва Касселя, которое я связал ниже, после ответа Оливера и ответа Павла. –  joewiz 03.03.2013 в 04:39
15

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

return string($xml)
    
ответ дан Oliver Hallam 21.07.2009 в 15:39
источник
  • Это на самом деле более идиоматическая и лучшая альтернатива, чем предпочтительный ответ выше. Он также будет корректно обрабатывать любые вложения дочерних узлов. –  Pavel Minaev 27.07.2009 в 22:08
  • Действительно. См. Объяснение Дэвида Касселя различий между text (), fn: string () и fn: data () - все три из них до сих пор появлялись в трех ответах. –  joewiz 03.03.2013 в 04:36
8

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

return data($xml)
    
ответ дан SeeJay 19.09.2009 в 11:14
источник
  • Точнее, fn: data () - это функция, которая дает вам атомизированное значение последовательности узлов, т.е. типизированное значение каждого узла; в то время как fn: string () дает вам строковое значение узла. См. Ссылки, которые я посыпал вышеприведенными комментариями, чтобы узнать больше о различиях между text (), fn: string () и fn: data (). –  joewiz 03.03.2013 в 04:43
0

Вставить в xs: string % Co_de%     

ответ дан savemaxim 20.05.2013 в 13:29
источник
0

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

fn-bea:serialize($xml)     

ответ дан Aniruddha Jagtap 15.12.2014 в 11:22
источник