我有一个带有 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
如何将上面示例中的值“There is 23142 Files!”获取到变量中?
最佳答案
您可以使用 EXTRACTVALUE
函数来获取这个值。这个函数有两个或三个参数:
- 包含 XML 文档的 XMLTYPE 对象。
- 一个 XPath 表达式,用于标识我们想要的值在 XML 中的位置。
- (可选)将 namespace 前缀绑定(bind)到 URI 的额外字符串。
在下面的查询中,我将上面提供的 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
的第三个参数将默认命名空间绑定(bind)到 http://tempuri.org/
。这是必需的,因为 XML 文档中的 SOAProxyResult
元素位于此命名空间内。
如果我运行这个查询,我会得到以下输出:
RESULT -------------------------------------------------------------------------------- There is 23142 Files!
从这里开始,希望将此查询的结果放入变量中是一个微不足道的修改。
关于xml - PLSQL 从 XML 读取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5016399/