6

我有一个带有 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 个文件! ”转换为变量?

4

2 回答 2

10

您可以使用该EXTRACTVALUE函数来获取此值。这个函数有两个或三个参数:

  • 一个包含 XML 文档的 XMLTYPE 对象。
  • 一个 XPath 表达式,用于标识我们想要的值在 XML 中的位置。
  • (可选)将命名空间前缀绑定到 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将默认命名空间绑定到http://tempuri.org/. 这是必要的,因为SOAProxyResult您的 XML 文档中的元素位于此名称空间中。

如果我运行这个查询,我会得到以下输出:

结果
-------------------------------------------------- ------------------------------

                    有23142个文件!

从这里开始,将这个查询的结果放入一个变量应该是一个微不足道的修改。

于 2011-02-16T18:20:31.307 回答
1

不久前 Oracle 杂志上有一篇很好的文章 - 它可能会对您有所帮助:

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

于 2011-02-16T12:34:06.293 回答