我正在尝试从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标记的值?
此时我无法弄清楚抽出我需要的值的语法。
谢谢!
答案 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