PLSQL从XML中读取值?

问题描述:

我有一个XML代码的字符串,我想从它提取一个值在PL/SQL中的变量。PLSQL从XML中读取值?

的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中我们需要的值的位置。
  • (可选)将名称空间前缀绑定到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只是返回文档中的所有元素SOAProxyResultEXTRACTVALUE的第三个参数将默认命名空间绑定到http://tempuri.org/。这是必要的,因为XML文档中的SOAProxyResult元素位于此名称空间内。

如果我运行此查询,我得到下面的输出:

 
RESULT 
-------------------------------------------------------------------------------- 

        There is 23142 Files! 

从这里,它应该有希望是一个微不足道的修改,把这个查询的结果到一个变量。

有在Oracle杂志一篇好文章而回 - 这可以帮助你:

http://www.oracle.com/oramag/oracle/01-jul/o41xml.html

,我们相当普遍在这里使用的另一件事是进XML API,当然这取决于你是如何存储/牵着你的XML数据:

http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96616/arxml24.htm

+0

谢谢,我会尽力挖掘它;-) – 2011-02-16 13:51:11

+0

我找不出一个简单的方法来读取这些值! – 2011-02-16 14:57:27