使用Oracle 11g使用SQL从XML中提取值

时间:2016-03-18 20:44:03

标签: sql xml oracle

我正在尝试从Web服务调用返回的XML中提取值。但是,包含“xmlns”属性会导致我的查询无法按预期工作。

此查询按预期工作,我回到“Y”:

SELECT EXTRACTVALUE(XMLType('<?xml version="1.0" encoding="utf-8"?><string><SAMP_OVERALL>Y</SAMP_OVERALL></string>')
, 
'/string/SAMP_OVERALL') myval
from dual;

以下是相同的查询,但根标记“string”包含xmlns属性。这就是实际的XML回归的方式。我缩小了它是给我带来麻烦的属性。它返回null:

SELECT EXTRACTVALUE(XMLType('<?xml version="1.0" encoding="utf-8"?><string xmlns="someweburl"><SAMP_OVERALL>Y</SAMP_OVERALL></string>')
, 
'/string/SAMP_OVERALL') myval
from dual;

为什么包含xmlns属性导致这不会返回SAMP_OVERALL标记的值?

此时我无法弄清楚抽出我需要的值的语法。

谢谢!

1 个答案:

答案 0 :(得分:1)

尝试:

SELECT 
  EXTRACTVALUE(XMLType(
     q'[<?xml version="1.0" encoding="utf-8" ?>
        <string xmlns="http://someweburl"><SAMP_OVERALL>Y</SAMP_OVERALL></string>]')
, 
'/*[local-name()="string"]/*[local-name()="SAMP_OVERALL"]') myval
from dual;

此答案解释了在定义没有前缀的默认命名空间时如何使用xpath提取值:
Getting elements with default namespace (no namespace prefix) using XPath