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

最佳答案

您可以使用 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的第三个参数将默认 namespace 绑定(bind)到http://tempuri.org/。这是必需的,因为XML文档中的SOAProxyResult元素在此 namespace 内。

    如果运行此查询,则会得到以下输出:

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

    有23142个文件!

    从这里开始,希望将这个查询的结果放入一个变量中进行微不足道的修改。

    关于xml - PLSQL是否从XML读取值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5016399/

    10-17 01:44