如何提取此XML

时间:2019-03-29 15:26:28

标签: sql xml oracle extract

我要提取一个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 个答案:

答案 0 :(得分:1)

假设+/-符号表示折叠的节点,并且您的XML实际上看起来像此CTE中的示例,则只需要在路径中包括根节点即可:

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.