【问题标题】:MS SQL iterate through XML with default namespacesMS SQL 使用默认命名空间遍历 XML
【发布时间】:2014-11-27 18:52:42
【问题描述】:

根据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)

请指教,如何解决?

【问题讨论】:

    标签: sql sql-server xml


    【解决方案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

    【讨论】:

    • 是的,谢谢,非常有用!但如果命名空间是嵌套的,则无济于事,例如:&lt;parent_node&gt; &lt;category xmlns="http://schemas.datacontract.org/2004/07/MonitorWang.Core.Interfaces.Entities"&gt;Low&lt;/category&gt; &lt;category&gt;Medium&lt;/category&gt; &lt;category&gt;High&lt;/category&gt; &lt;/parent_node&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多