基于this回复
例如,我们有像这样的XML
<parent_node >
<category>Low</category>
<category>Medium</category>
<category>High</category>
</parent_node>
一切都很好。但在我的情况下,我在这里有一个默认的XML命名空间,所以我的XML看起来像这样:
<parent_node xmlns="http://schemas.datacontract.org/2004/07/MonitorWang.Core.Interfaces.Entities">
<category>Low</category>
<category>Medium</category>
<category>High</category>
</parent_node>
现在它不起作用。
整个脚本:
DECLARE @XmlVariable XML = '<parent_node xmlns="http://schemas.datacontract.org/2004/07/MonitorWang.Core.Interfaces.Entities">
<category>Low</category>
<category>Medium</category>
<category>High</category>
</parent_node>'
SELECT
XTbl.Cats.value('.', 'varchar(50)')
FROM
@XmlVariable.nodes('/parent_node/category') AS XTbl(Cats)
请,建议,如何解决?
答案 0 :(得分:1)
如果您想在整个文档中考虑默认命名空间,那么您可以使用类似....
的内容 DECLARE @XmlVariable XML = '<parent_node xmlns="http://schemas.datacontract.org/2004/07/MonitorWang.Core.Interfaces.Entities">
<category>Low</category>
<category>Medium</category>
<category>High</category>
</parent_node>'
SELECT
XTbl.Cats.value('.', 'varchar(50)')
FROM
@XmlVariable.nodes('declare default element namespace "http://schemas.datacontract.org/2004/07/MonitorWang.Core.Interfaces.Entities"; /parent_node/category') AS XTbl(Cats)
或者,您可以在xquery字符串中声明名称空间,如果默认名称空间位于子元素上,则在XPath中引用它...
@XmlVariable.nodes('declare namespace c="http://schemas.datacontract.org/2004/07/MonitorWang.Core.Interfaces.Entities"; /parent_node/c:category')
还有更多细节here。