【问题标题】:XML xquery retrieve the descendent nodes value from a xml stringXML xquery 从 xml 字符串中检索后代节点值
【发布时间】:2014-01-02 10:44:14
【问题描述】:

我正在使用 SQL Server 中的 XQuery 读取 XML 文档。这是我的 XML:

  declare @xml as xml='
  <contactdata>
    <contacts>
      <groupkey>24</groupkey>
      <groupname>Test Group One</groupname>
      <contact>
        <contactkey>100</contactkey>
        <contactname>Test Contact One</contactname>
      </contact>
      <contact>
        <contactkey>111</contactkey>
        <contactname>Test Contact Two</contactname>
      </contact>
    </contacts>
    <contacts>
      <groupkey>26</groupkey>
      <groupname>Test Group Two</groupname>
       <contact>
        <contactkey>101</contactkey>
        <contactname>Test Contact Six</contactname>
      </contact>
    </contacts>
  </contactdata>';

为了检索每个组下的每个联系人详细信息,我使用了这种 XQuery 语法

select 
    c.value('(groupkey)[1]','int'),
    c.value('(groupname)[1]','nvarchar(max)'),
    c.value('(contact/contactkey)[1]','int'),
    c.value('(contact/contactname)[1]','nvarchar(max)')
from
@xml.nodes('contactdata/contacts') as Contacts(c)

但这只会返回每个组下的第一个联系人。

但我需要这个输出

请帮忙。

【问题讨论】:

    标签: xml sql-server-2012 xquery xquery-sql


    【解决方案1】:

    只需将您的查询更改为:

    select 
        c.value('(../groupkey)[1]','int'),
        c.value('(../groupname)[1]','nvarchar(max)'),
        c.value('(contactkey)[1]','int'),
        c.value('(contactname)[1]','nvarchar(max)')
    from
        @xml.nodes('contactdata/contacts/contact') as Contacts(c)
    

    您需要获取所有&lt;contact&gt; 元素的列表 - 然后从这些 XML 片段中提取必要的数据。要获取groupkey 和groupname,您可以使用../ 将“树向上”导航到父节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多