2013-10-21 112 views
1

我有XML對XML屬性,並與母公司其他屬性屬性值SQL Server 2008的

<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]

回答

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

+0

哦~~男人太感謝你了。其中一人將頭撞在鍵盤上一個小時。 將標記爲答案。非常感謝。 –

+0

@DJPsiPhi所以你可以接受答案,如果你覺得它有用 –