1

私は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)

編集:すべてを探しているときに、最初のシングルトンのみを提供します。[1]/[2] を使用せずに必要なものを照会する方法を見つけるために、MSDN の肥大化を乗り越えることができませんでした

4

1 に答える 1

0

あなたは近いです@*、ノード関数で使用してすべての属性を取得するだけです

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

于 2013-10-21T20:46:19.237 に答える