首页 > 解决方案 > oracle xml解析多行

问题描述

从 xml 查询不返回行。

我运行此查询但不返回行。

我的 xml 是:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:testata xmlns:ns0="http://siete">
  <ns0:product>
    <ns0:YEAR>2019</ns0:YEAR>
    <ns0:PERIOD>1</ns0:PERIOD>
  </ns0:product>
  <ns0:product>
    <ns0:YEAR>2019</ns0:YEAR>
    <ns0:PERIOD>2</ns0:PERIOD>
  </ns0:product>
</ns0:testata>

我的查询是

FROM XMLTABLE('/testata/product'  
         PASSING   
              (select  xmltype(t.XML1) doc
                 from tb_test t)
         COLUMNS  
             name  varchar2(4)    PATH './YEAR'
     ) xmlt   

0 行

请帮我

标签: oraclexmltype

解决方案


您的 XML 文档有一个命名空间,因此您需要在 XMLTable 调用中使用通配符,或者 - 最好 - 提供相同的命名空间信息和前缀:

-- CTE for sample data
with tb_test (xml1) as (select '<?xml version="1.0" encoding="UTF-8"?>
<ns0:testata xmlns:ns0="http://siete">
  <ns0:product>
    <ns0:YEAR>2019</ns0:YEAR>
    <ns0:PERIOD>1</ns0:PERIOD>
  </ns0:product>
  <ns0:product>
    <ns0:YEAR>2019</ns0:YEAR>
    <ns0:PERIOD>2</ns0:PERIOD>
  </ns0:product>
</ns0:testata>' from dual
)
-- actual query
select x.year
from tb_test t
cross join xmltable(
  xmlnamespaces('http://siete' as "ns0"),
  '/ns0:testata/ns0:product'
  passing xmltype(t.xml1)
  columns year number path 'ns0:YEAR'
) x;

      YEAR
----------
      2019
      2019

推荐阅读