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