如何提取此XML

问题描述 投票:0回答:1

我想提取一个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

sql xml oracle extract
1个回答
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. 
© www.soinside.com 2019 - 2024. All rights reserved.