MS SQL使用默认名称空间迭代XML

时间:2014-11-27 10:06:49

标签: sql sql-server xml

基于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)

请,建议,如何解决?

1 个答案:

答案 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