我有一个包含命名空间引用的示例 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 数据以删除命名空间。我希望我只是忽略了有人可以向我指出的一些事情。
请尝试按如下方式修改命名空间声明:
xmlnamespaces(default 'http://example.com/sample.xsd')