SQL Server中的XML查詢元素,我得到了下面的XML:沒有孩子
<Node attr1="value1" attr2="value2">
<SubNode SubAttr1="subValue1" subAttr2="subValue2" />
</Node>
我想知道是否有一種方法做一個XQuery表達式只返回<Node>
元素。
<Node attr1="value1" attr2="value2"> <Node>
SQL Server中的XML查詢元素,我得到了下面的XML:沒有孩子
<Node attr1="value1" attr2="value2">
<SubNode SubAttr1="subValue1" subAttr2="subValue2" />
</Node>
我想知道是否有一種方法做一個XQuery表達式只返回<Node>
元素。
<Node attr1="value1" attr2="value2"> <Node>
對不起,您在這裏找到了一個通用的解決方案 - 如果您必須使用Microsoft SQL Server,它不提供計算的元素構造函數,這些元素的構造函數可以在運行時計算出來(如@dirkk正在使用)。
當你知道這個元素一直被稱爲「節點」,你可以做以下(使用固定的節點名稱):
element Node { /Node/@* }
如果您還希望包括(直接)文本孩子:
element Node { /Node/@*, /Node/text() }
如果您需要支持任意元素名稱:您無法在SQL Server中使用XQuery執行此操作。
您可以編寫一個函數來做到這一點:
declare function local:strip-children($e as element()*) as element()* {
element {node-name($e)} {$e/@*}
};
local:strip-children(/Node)
當然,你也可以做到這一點沒有像這樣一個功能:
element {node-name(/node)} {/Node/@*}
所以只需內聯代碼來自函數。但是,在我看來,函數方法更可重用。
MS SQL Server不支持帶有非常量名稱的計算元素構造函數,這會引發錯誤。 –
這就是它,謝謝! – gonferr