我目前正在使用 Oracle 11g 中的 Oracle PL/SQL。我有两种可以使用的 XML。
以下是两种类型的 XML 示例以及我到目前为止所做的提取。
类型 1 XML:
<ListItens1 xmlns=“xpto”>
<item id=”1”>
<product type=”fruit”>
<model> Apple </model>
<date>02/19/2013</date>
<year>2013</year>
</product>
</item >
<item id=”2”>
<product type=”notebook”>
<model> Vostro </model>
<date>02/19/2013</date>
<year> 2013 </year>
</product>
</item>
</ListItens1>
类型 2 XML:
<ListItens2 xmlns=“xpto”>
<item>1</item>
<product type=”fruit”>
<model> Apple </model>
<date>02/19/2013</date>
<year>2013</year>
</product>
<item>2</item>
<product type=”notebook”>
<model> Vostro </model>
<date>02/19/2013</date>
<year> 2013 </year>
</product>
<ListItens2>
这些 XML 被插入到具有 XMLTYPE 类型的 Archive 字段的表中。
CREATE TABLE XML_PRODUCT ( ID_XML NUMBER, DATA DATE, ARCHIVE XMLType);
当 XML 是 1 类型时,我这样做没有问题:
SELECT
ExtractValue( value( NFe ) , '/item/@id', 'xmlns="xpto' ) ID,
ExtractValue( value( NFe ) , '/item/product/@type', 'xmlns="xpto' ) TYPE,
ExtractValue( value( NFe ) , '/item/product/model', 'xmlns="xpto' ) MODEL,
ExtractValue( value( NFe ) , '/item/product/date'', 'xmlns="xpto' ) DATE,
ExtractValue( value( NFe ) , '/item/product/year'', 'xmlns="xpto' ) YEAR,
FROM XML_PRODUCT,
TABLE( XMLSequence( Extract ( ARCHIVE, '/listItens1/item', 'xpto' ) ) ) NFe
WHERE ID_XML = 1;
结果是:
ID | TYPE | MODEL | DATE | YEAR
-----------------------------------------------
1 | fruit | Apple | 02/19/2013 | 2013
2 | notebook | Vostro | 02/19/2013 | 2013
但是对于 TYPE 2,我不知道如何在 ITEM 和 PRODUCT 之间进行关联,因为它们在 XML 中处于同一层次。
是否可以在不修改 XML 的情况下提取与项目关联的产品数据?