Postgres XMLTABLE XML 数据中的命名空间问题

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

我有一个包含命名空间引用的示例 XML 数据集:

<Records xmlns="http://example.com/sample.xsd">
   <Record>
     <Id>1</Id>
   </Record>
   <Record>
     <Id>2</Id>
   </Record>
   <Record>
     <Id>3</Id>
   </Record>
   <Record>
     <Id>4</Id>
   </Record>
 </Records>

当我运行以下查询时,我应该得到 4 行,每条记录一行:

with cte_data as (
    select '<Records xmlns="http://example.com/sample.xsd">
   <Record>
     <Id>1</Id>
   </Record>
   <Record>
     <Id>2</Id>
   </Record>
   <Record>
     <Id>3</Id>
   </Record>
   <Record>
     <Id>4</Id>
   </Record>
 </Records>'::xml as xml_data
    )
select *
from cte_data d
left join xmltable(xmlnamespaces('xmlns="http://example.com/sample.xsd"' as x),
     'Records/Record' passing d.xml_data
     columns id text path 'Id'
     ) as x on true;

相反,我得到一个结果行(XML),没有来自 XML 的任何数据(id 为 NULL)。

有趣的是,如果我从 XML 中删除命名空间,它就可以正常工作!问题是我无法更改正在处理的 XML 数据以删除命名空间。我希望我只是忽略了有人可以向我指出的一些事情。

xml postgresql namespaces xmltable
1个回答
0
投票

请尝试按如下方式修改命名空间声明:

xmlnamespaces(default 'http://example.com/sample.xsd')
© www.soinside.com 2019 - 2024. All rights reserved.