2013-08-23 48 views
2

我已經使用Google搜索,但似乎找不到直接答案。我有一個簡單的表格,我在其中加載了完整的XML文件的內容。現在我試着查詢XML數據並給它一個結構化的概述,這個工作,但我需要一些解釋。在表格(SQL)中加載XML並且查詢

我的問題(見下文使用的數據):

  • 有人能解釋我如何能延長我的查詢,所以我也可以從XML部分「AddressC」查詢數據。現在我只能從'AddressB'獲取數據。

  • 在世界上這是什麼做的一部分,爲什麼有一個網址(我已經複製從internetz查詢):XMLTABLE(XMLNAMESPACES( 'http://www.w3.org/2001/XMLSchema-instance' 作爲 「XSI」)

* XML表格(XML_FILES2,表中有拖細胞測試1和測試2):*

<PurchaseOrder> 
    <AddressB> 
    <Name>Ellen Adams</Name> 
    <Street>123 Maple Street</Street> 
    <City>Mill Valley</City> 
    <State>CA</State> 
    <Zip>10999</Zip> 
    <Country>USA</Country> 
    </Addressb> 
    <AddressC> 
    <Name>Tai Yee</Name> 
    <Street>8 Oak Avenue</Street> 
    <City>Old Town</City> 
    <State>PA</State> 
    <Zip>95819</Zip> 
    <Country>USA</Country> 
    </AddressC> 
</PurchaseOrder> 

和查詢我我們Ë

SELECT street 
FROM xml_files2 xf, xmltable(xmlnamespaces('http://www.w3.org/2001/XMLSchema-instance' as "xsi"), 
'PurchaseOrder/Addressb' passing xf.test2 
columns 
street varchar2(100) path 'Street' 
) PurchaseOrder; 
+0

XML處理不(到目前爲止我所知)標準化 - 您使用什麼數據庫系統? –

+1

我想你正在使用Oracle –

+0

Oracle數據庫10G – Regenbui

回答

0

你有無效的XML。結束標記Addressb與開始標記AddressB不匹配。

如果在您的問題中只是一個錯字,下面是從XML中的各種父母中讀取Street元素的示例。

CREATE TABLE T1 (C1 XMLTYPE); 

INSERT INTO T1 VALUES (XMLTYPE('<PurchaseOrder> 
    <AddressB> 
    <Name>Ellen Adams</Name> 
    <Street>123 Maple Street</Street> 
    <City>Mill Valley</City> 
    <State>CA</State> 
    <Zip>10999</Zip> 
    <Country>USA</Country> 
    </AddressB> 
    <AddressC> 
    <Name>Tai Yee</Name> 
    <Street>8 Oak Avenue</Street> 
    <City>Old Town</City> 
    <State>PA</State> 
    <Zip>95819</Zip> 
    <Country>USA</Country> 
    </AddressC> 
</PurchaseOrder>')); 


SELECT STREET FROM T1, XMLTABLE('PurchaseOrder/*' PASSING T1.C1 
    COLUMNS 
     STREET VARCHAR2(100) PATH 'Street' 
    ) PURCHASEORDER; 

結果:在數據庫

STREET                        
---------------------------------------------------------------------------------------------------- 
123 MAPLE STREET                      
8 Oak Avenue