【问题标题】:Pair XML Attribute and Other Attributes with Parent Attribute Value SQL Server 2008将 XML 属性和其他属性与父属性值配对 SQL Server 2008
【发布时间】:2013-10-21 20:39:40
【问题描述】:

我有xml

  <translation id="A">mi casa</translation>
  <translation id="B">
    <div style="width:100px; white-space:normal; line-height:13px;" onclick="DoSomething()">una gato</div>
  </translation>
  <translation id="C">ese</translation>

希望生成以下结果集

attr   parent    value

style  B         width:100px; white-space:normal; line-height:13px;
onclck B         DoSomething()

此 XML 文档中的大部分内容都侧重于翻译 ID 的值。可以存在许多且没有其他属性。

我已经走到这一步了:

select 
         pnd.value('(..//@id)[1]','nvarchar(200)') ID
            , pnd.value('(//div/@*) [1] ','nvarchar(max)') elem
            ,pnd.value('local-name(@*[1])','nvarchar(200)') as Attribute
            from @inputXML.nodes('/translation_collection/translation/*') pn(pnd)

编辑:在寻找所有时,只给我第一个单例。无法通过 MSDN 上的臃肿来了解如何在不使用 [1]/[2] 的情况下查询我需要的内容

【问题讨论】:

    标签: sql sql-server xml xpath sqlxml


    【解决方案1】:

    你已经接近了,只需在节点函数中使用@*即可获取所有属性

    declare @data xml = '
      <translation id="A">mi casa</translation>
      <translation id="B">
        <div style="width:100px; white-space:normal; line-height:13px;" onclick="DoSomething()">una gato</div>
      </translation>
      <translation id="C">ese</translation>'
    
    select
        t.c.value('local-name(.)', 'nvarchar(max)') as attr,
        t.c.value('../../@id', 'nvarchar(max)') as parent,
        t.c.value('.', 'nvarchar(max)') as value
    from @data.nodes('translation/div/@*') as t(c)
    

    sql fiddle demo

    【讨论】:

    • 哦,伙计,非常感谢。其中一个将你的头撞在键盘上一个小时。将标记为答案。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    相关资源
    最近更新 更多