2014-01-07 72 views
0

我想修改一大塊xml並插入額外的信息而不改變原始信息。從源「表」複製屬性

由於XML文檔,如下列:

<xml> 
    <node att1="a" att2="b"/> 
    <node att1="c" att99="d"/> 
</xml> 

我想達到以下的輸出:

<xml> 
    <node extra="hello" att1="a" att2="b"><More/></node> 
    <node extra="hello" att1="c" att99="d"><More/></node> 
</xml> 

我卡上覆制現有的屬性添加到新的部分xml樹。

SELECT 'hello' AS [@extra], 
    T.C.query('@*') AS [*] --this line doesn't work 
FROM @xml.nodes('/xml/node') T(C) 
FOR XML PATH ('xml') 

我有點希望T.C.query('@*') AS [*]部分將剛纔複製的屬性,但沒有喜悅。

如何在不知道名稱的情況下複製所有屬性?

+0

我已經用另一種方式解決了我的具體問題(使用字符串替換)。這是一個巨大的混亂,但它做我所需要的(現在) – DJL

+0

你可能想發佈一個單獨的問題,問如何做這個操作沒有cludge –

回答

0

您可以重建XML並使用query()函數插入該屬性。

declare @XML xml = ' 
<xml> 
    <node att1="a" att2="b"/> 
    <node att1="c" att99="d"/> 
</xml>' 

select @XML.query('element xml { 
           for $n in xml/node 
           return element node { 
                attribute extra{"hello"}, $n/@* 
                } 
           }')