首页 > 解决方案 > 从 xmlns oracle 中提取值

问题描述

此代码返回 null,我如何从句点中提取 012019-122019

with qwe as (
select  xmltype('<singleAggregatePaymentResponse xmlns:ns7="http://www.mtszn.kz/services/PersonCotracts/schemas">
                  <ns7:isEspPayer xmlns="http://www.mtszn.kz/services/PersonCotracts/schemas">true</ns7:isEspPayer>

                  <ns7:periods xmlns="http://www.mtszn.kz/services/PersonCotracts/schemas">
                     <period>122019</period>
                     <period>112019</period>
                     <period>102019</period>
                     <period>092019</period>
                     <period>082019</period>
                     <period>072019</period>
                     <period>062019</period>
                     <period>052019</period>
                     <period>042019</period>
                     <period>032019</period>
                     <period>022019</period>
                     <period>012019</period>
                  </ns7:periods>

               </singleAggregatePaymentResponse>')xml
               from dual
               )

              select
              extractvalue(value(x101_1),'/period') iou,
               xml

                from qwe q,
                     table(xmlsequence(q.xml.extract('//period')))(+) x101_1

标签: xmloraclexml-namespaces

解决方案


extractvalue 和 xmlsequence 都已弃用。

您可以改为使用 xmltable 执行此操作:

select x.period
from qwe q
cross join xmltable(
  xmlnamespaces(default 'http://www.mtszn.kz/services/PersonCotracts/schemas'),
  '//period'
  passing q.xml
  columns period varchar2(6) path '.'
) x;

db<>小提琴

由于您的 XML 只有一个命名空间,我已将其声明为默认命名空间。有多个,或者只是如果你喜欢它,你可以命名它:

select x.period
from qwe q
cross join xmltable(
  xmlnamespaces('http://www.mtszn.kz/services/PersonCotracts/schemas' as "ns7"),
  '//ns7:period'
  passing q.xml
  columns period varchar2(6) path '.'
) x;

db<>小提琴


推荐阅读