我用谷歌搜索但似乎无法找到一个直接的答案。我有一个简单的表,我在其中加载了一个完整的XML文件的内容。现在我尝试查询XML数据并给它一个结构化的概述,这个工作,但我需要一些解释。
我的问题(请参阅下面的二手数据):
有人可以解释我如何扩展我的查询,所以我也可以从XML部分'AddressC'查询数据。现在我只能从'AddressB'获取数据。
这部分做了什么,以及为什么有一个网址(我已经从internetz复制了查询): xmltable(xmlnamespaces('http://www.w3.org/2001/XMLSchema-instance'as“xsi” “)
* 表格中的XML(XML_FILES2,表格包含两个单元格test1和test2):*
<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 :(得分: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