【问题标题】:Use SQL Server to get all the data from XML nodes named the same使用 SQL Server 从同名的 XML 节点获取所有数据
【发布时间】:2013-02-27 12:28:35
【问题描述】:

我有一个 XML 文件,其中我需要数据的节点都命名相同。我了解如何访问第一条(或第二条记录),所以下面的查询只给了我第二个作者(<a1> 标签)。如何将所有作者作为一个列?

      DECLARE @MyXML XML
      SET @MyXML = '<refworks>
            <reference>
               <rt>Journal Article</rt> 
               <sr>Print(0)</sr> 
               <id>869</id> 
               <a1>Aabye,Martine G.</a1> 
               <a1>Hermansen,Thomas Stig</a1> 
               <a1>Ruhwald,Morten</a1> 
               <a1>PrayGod,George</a1> 
               <a1>Faurholt-Jepsen,Daniel</a1> 
               <a1>Jeremiah,Kidola</a1> 
               <a1>Faurholt-Jepsen,Maria</a1> 
               <a1>Range,Nyagosya</a1> 
           </reference>
         </refworks>'

      SELECT 
          author.value('(a1)[2]', 'varchar(MAX)') AS 'Author'
      FROM @MyXML.nodes('/refworks/reference') AS ref(author)

【问题讨论】:

    标签: sql-server xml nodes


    【解决方案1】:

    试试这个:-

      SELECT 
          author.value('./text()[1]', 'varchar(MAX)') AS 'Author'
      FROM @MyXML.nodes('//refworks/reference/child::node()') AS ref(author)
      where  author.value('local-name(.)[1]', 'varchar(100)') ='a1'
    

    child::node() 表示轴说明符,child:: 是轴分隔符。

    为了了解用于在节点中向下钻取的子轴,可以在此MSDN 文档中找到。

    manipulating xml data in sql server

    更新:-

    一个更简单的方法你在正确的轨道上。在 from 子句中指定子节点以过滤数据

     SELECT 
          author.value('(.)[1]', 'varchar(MAX)') AS 'Author'
      FROM @MyXML.nodes('/refworks/reference/a1') AS ref(author)
    

    【讨论】:

    • 太棒了 - 非常感谢。你能给我一些链接来解释它在做什么吗?
    • 查看文档后如果您仍有疑问,请告诉我
    • @praveen 你能在这里看看我的问题吗:stackoverflow.com/questions/27638108/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 2016-12-09
    • 2023-03-09
    • 2019-01-07
    • 1970-01-01
    相关资源
    最近更新 更多