我正在尝试修改一大块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 :(得分:0)
您可以使用query()
函数重建XML并插入属性。
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/@*
}
}')