Разбор XML в Oracle - PullRequest
       1

Разбор XML в Oracle

1 голос
/ 13 января 2011

У меня интересная ситуация в оракуле.Мы храним строку xml в поле и часть следующего:

<dc:subject>info1</dc:subject>  <dc:subject>info2</dc:subject><dc:subject>info3</dc:subject>

И когда я запрашиваю это поле, я использую следующее:

m.M_DC.extract('/qualifieddc/dc:subject/text()', 'xmlns:dc="http://purl.org/dc/elements/1.1/"').getStringVal() "INFO",

И полученную область INFOстановится "info1info2info3".

Есть ли какая-либо функция оракула или способ сделать эту информационную область как "info1, info2, info3"?

Любая помощь будет оценена ...

Спасибо ...

Ответы [ 4 ]

2 голосов
/ 13 января 2011

XML в Oracle - это кошмар. Вы можете попробовать что-то вроде этого (XMLTABLE на помощь):

 > select wmsys.wm_concat(''||column_value) text
  2  from
  3  xmltable(
  4     XMLNAMESPACES('http://purl.org/dc/elements/1.1/' as "dc"),
  5     '$xml/qualifieddc/dc:subject/text()'
  6     passing xmltype('<qualifieddc xmlns:dc="http://purl.org/dc/elements/1.1/
">' ||
  7             '<dc:subject>info1</dc:subject>  <dc:subject>info2</dc:subject><
dc:subject>info3</dc:subject>' ||
  8         '</qualifieddc>') as "xml");

TEXT
--------------------------------------------------------------------------------

info1,info2,info3

Обратите внимание, что я использую wmsys.wm_concat для объединения, что не рекомендуется. Используйте любую другую реализацию stragg.

0 голосов
/ 02 января 2017

Как уже отмечал Самуэль в своем комментарии, обработка XML в Oracle - это кошмар. В частности, если вы загружаете большие объемы данных XML. Хуже, когда XML или XSD очень сложны, как в случае со многими отраслевыми стандартами. На мой взгляд, лучший подход - это предварительная обработка XML и сохранение его в виде таблиц в Oracle. Тогда вам не нужно изучать эзотерические языки запросов, такие как XQuery и XPath. Инструменты ETL, такие как ODI, позволят вам достичь этого. Существуют также специальные парсеры XML для предприятий, которые позволят вам загрузить XML в Oracle без написания кода

0 голосов
/ 01 декабря 2014

Этот код поможет вам.

ОБЪЯВИТЬ x XMLType: = XMLType ('info1
info2 info3');НАЧАТЬ ДЛЯ r IN (ВЫБЕРИТЕ ExtractValue (Значение (p), '/ dc / text ()') как имя из таблицы (XMLSequence (Extract (x, '/ dc'))) p) LOOP

ENDLOOP;END;

код, протестированный мной в plsql разработчику.

0 голосов
/ 13 января 2011

Я думаю, что это будет преобразование, а не запрос. Вы знакомы с XSL? Если это так, посмотрите на примеры XMLTransform (), и оттуда все должно быть довольно просто:

http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/functions254.htm#SQLRF06171

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...