xml - PLSQL 从 XML 读取值?

标签 xml plsql plsqldeveloper

我有一个带有 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/

相关文章:

xml - 匹配以空格分隔的属性值的 XPath?

Android Studio 创建项目生成带有垃圾字符的 colors.xml

sql - 将每个字母替换为 PL/SQL 中字符串中的 ASCII 代码

sql - Oracle将秒数转换为小时:分钟:秒

sql - PLSQL - 提高代码效率

xml - 您如何使用 XSL 转换和 XML 按属性值访问元素?

java - 如何使用 JAXB 编码消除元素/属性中自动生成的命名空间前缀

sql - 查找调用 SQL_ID 的 PL/SQL 包

plsql - sqldeveloper - DBMS_OUTPUT.PUT_LINE() 不起作用

plsql - PL-SQL递归函数