【问题标题】:shred xml with variable number of nodes使用可变数量的节点粉碎 xml
【发布时间】:2011-02-07 00:19:55
【问题描述】:

我有一个 xml 列,其中包含如下数据:

<AuthorList CompleteYN="Y">
<Author ValidYN="Y">
<LastName>Alió</LastName>
<ForeName>J L</ForeName>
<Initials>JL</Initials>
</Author>
<Author ValidYN="Y">
<LastName>Ortiz</LastName>
<ForeName>D</ForeName>
<Initials>D</Initials>
</Author>
<Author ValidYN="Y">
<LastName>Muftuoglu</LastName>
<ForeName>O</ForeName>
<Initials>O</Initials>
</Author>
<Author ValidYN="Y">
<LastName>Garcia</LastName>
<ForeName>M J</ForeName>
<Initials>MJ</Initials>
</Author>
</AuthorList>

作者的数量是可变的。提取第一作者等我没有问题:

SELECT
 ID,
 AuthorList.value('(Author/ForeName)[1]', 'varchar(max)') as ForeName,
 AuthorList.value('(Author/LastName)[1]', 'varchar(max)') as LastName,
 AuthorList.value('(Author/Initials)[1]', 'varchar(max)') as Initials
FROM   
      XMLs CROSS APPLY 
      xml.nodes('//AuthorList') AS AuthorList(AuthorList)

我只是好奇如何“动态”实现这样的目标:

1 J L Alió JL 1 D 奥尔蒂斯 D 1 O 穆夫托奥卢 O 1 M J 加西亚 MJ

谢谢!

【问题讨论】:

    标签: sql-server-2005 xquery


    【解决方案1】:

    这似乎可以完成工作:

    select 
        AuthorList.value('(ForeName/text())[1]', 'varchar(max)') as ForeName,
        AuthorList.value('(LastName/text())[1]', 'varchar(max)') as LastName,
        AuthorList.value('(Initials/text())[1]', 'varchar(max)') as Initials
    from 
        XMLs CROSS APPLY 
          xml.nodes('//AuthorList/Author') AS AuthorList(AuthorList)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多