使用SQL Server从命名相同的XML节点中获取所有数据

2024-04-15

我有一个 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)

尝试这个 :-

  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 and ::是轴分隔符。

要了解用于在节点中向下钻取的子轴,可以在此处找到MSDN http://msdn.microsoft.com/en-US/library/ms345122%28v=SQL.90%29.aspx文档。

or 在sql server中操作xml数据 https://www.simple-talk.com/sql/database-administration/manipulating-xml-data-in-sql-server/

更新 :-

一种更简单的方法您走在正确的轨道上。在 from 子句中指定用于过滤数据的子节点

 SELECT 
      author.value('(.)[1]', 'varchar(MAX)') AS 'Author'
  FROM @MyXML.nodes('/refworks/reference/a1') AS ref(author)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用SQL Server从命名相同的XML节点中获取所有数据 的相关文章

随机推荐