【问题标题】:SQL Server XML Data Type query issueSQL Server XML 数据类型查询问题
【发布时间】:2009-09-12 12:31:43
【问题描述】:

请参阅下面的 SQL Server 2005 脚本

Declare @xmlData XML
SET @xmlData = '<?xml version="1.0"?>
<bookstore xmlns="http://myBooks">
  <book genre="autobiography" publicationdate="1981" 
      ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book genre="novel" publicationdate="1967" 
      ISBN="0-201-63361-2">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
  <book genre="philosophy" publicationdate="1991" 
      ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <first-name>Sidas</first-name>
      <last-name>Plato</last-name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>'

Select  T.Item.query('.')
From @xmlData.nodes('/bookstore/book') AS T(Item)

这个脚本应该给我所有书籍节点的列表。但它没有给出预期的行为。如果我删除 XMLNS,那么它工作正常。谁能解释一下?

下面的工作正常。

Declare @xmlData XML
SET @xmlData = '<?xml version="1.0"?>
<bookstore>
  <book genre="autobiography" publicationdate="1981" 
      ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book genre="novel" publicationdate="1967" 
      ISBN="0-201-63361-2">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
  <book genre="philosophy" publicationdate="1991" 
      ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <first-name>Sidas</first-name>
      <last-name>Plato</last-name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>'

Select  T.Item.query('.')
From @xmlData.nodes('/bookstore/book') AS T(Item)

谁能解释我如何纠正第一个脚本?我想用 xmlns 运行脚本。

【问题讨论】:

    标签: sql sql-server xml sql-server-2005 tsql


    【解决方案1】:

    正如您所说 - 这是因为您的原始 XML 数据位于 XML 名称空间中,如果是这种情况,您还需要在 XQuery 中使用该 XML 名称空间:

    SELECT 
       T.Item.query('.')
    FROM   
       @xmlData.nodes('declare namespace ns="http://myBooks";/ns:bookstore/ns:book') 
       AS T(Item)
    

    您需要将declare namespace ns="http://myBooks"; 部分插入到您的XQuery 中,然后使用定义的名称空间前缀ns(您可以在这里使用任何东西,真的)来引用XML 对象。

    马克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多