2011-02-16 117 views
5

我有一個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個文件!」在上面的例子中到一個變量?

回答

9

可以使用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! 

從這裏,它應該有希望是一個微不足道的修改,把這個查詢的結果到一個變量。

1

有在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