我有一个包含XML代码的字符串,我想从PL / SQL中将一个值提取到一个变量。
XML非常简单,与此不同:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<SOAProxyResponse xmlns="http://tempuri.org/">
<SOAProxyResult>
There is 23142 Files!
</SOAProxyResult>
</SOAProxyResponse>
</s:Body>
</s:Envelope
如何将上面示例中的“有23142个文件!”值变为变量?
答案 0 :(得分:9)
您可以使用EXTRACTVALUE
功能获取此值。此函数需要两个或三个参数:
在下面的查询中,我将上面提到的XML作为字符串,并从中创建了XMLTYPE对象。然后我使用EXTRACTVALUE
来获取您要求的值:
SELECT EXTRACTVALUE(XMLTYPE(
'<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<SOAProxyResponse xmlns="http://tempuri.org/">
<SOAProxyResult>
There is 23142 Files!
</SOAProxyResult>
</SOAProxyResponse>
</s:Body>
</s:Envelope>'), '//SOAProxyResult', 'xmlns="http://tempuri.org/"') AS result
FROM dual;
XPath表达式//SOAProxyResult
仅返回文档中的所有SOAProxyResult
元素。 EXTRACTVALUE
的第三个参数将默认命名空间绑定到http://tempuri.org/
。这是必要的,因为XML文档中的SOAProxyResult
元素位于此命名空间内。
如果我运行此查询,我会得到以下输出:
RESULT -------------------------------------------------------------------------------- There is 23142 Files!
从这里开始,希望将此查询的结果放入变量中是一项微不足道的修改。
答案 1 :(得分:1)
前一段时间甲骨文杂志上发表了一篇很好的文章 - 这可能会对你有所帮助:
http://www.oracle.com/oramag/oracle/01-jul/o41xml.html
我们在这里使用的另一件事是XMLType API,但当然这取决于您存储/保存XML数据的方式:
http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96616/arxml24.htm