Как извлечь этот XML

#sql #xml #oracle #extract

#sql #xml #Oracle #извлечь

Вопрос:

Я хочу извлечь XML-файл (XML_DATA):

XML:

 -<XP6>
  <INFO_1>
  <INFO_2>
  <INFO_3>
 -<Prdct>
  -<Prdct_row>
   .....
   <LILBFLO>Samsung,corp. </LILBFLO> <--value
  

Я пробовал это, но это не работает:

 EXTRACTVALUE(XML_DATA,'/Prdct/Prdct_row/LILBFLO/text()')
  

Как правильно использовать extractvalue ?

Ответ №1:

Предполагая, что символы / — указывают на свернутые узлы, и ваш XML на самом деле выглядит примерно так, как образец в этом CTE, вам просто нужно включить корневой узел в path:

 with your_table (xml_data) as (
  select xmltype('<XP6>
 <INFO_1/>
 <INFO_2/>
 <INFO_3/>
 <Prdct>
  <Prdct_row>
   <LILBFLO>Samsung,corp. </LILBFLO>
  </Prdct_row>
 </Prdct>
</XP6>') from dual
)
select EXTRACTVALUE(XML_DATA,'/XP6/Prdct/Prdct_row/LILBFLO/text()')
from your_table;

EXTRACTVALUE(XML_DATA,'/XP6/PRDCT/PRDCT_ROW/LILBFLO/TEXT()')
------------------------------------------------------------
Samsung,corp. 
  

Но extractvalue() функция устарела, поэтому вместо нее следует использовать XMLQuery:

 select XMLQuery('/XP6/Prdct/Prdct_row/LILBFLO/text()' passing XML_DATA returning content)
from your_table;

XMLQUERY('/XP6/PRDCT/PRDCT_ROW/LILBFLO/TEXT()'PASSINGXML_DATARETURNINGCONTENT)  
--------------------------------------------------------------------------------
Samsung,corp.