oracle xml解析多行

问题描述 投票:0回答:1

从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行

请帮我

oracle xmltype
1个回答
2
投票

您的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
© www.soinside.com 2019 - 2024. All rights reserved.