我得到了以下XML:
<Node attr1="value1" attr2="value2">
<SubNode SubAttr1="subValue1" subAttr2="subValue2" />
</Node>
我想知道是否有办法让XQuery表达式只返回<Node>
元素。
<Node attr1="value1" attr2="value2">
<Node>
答案 0 :(得分:2)
我很遗憾你在这里找不到一般解决方案 - 如果你一定要使用Microsoft SQL Server,它不提供计算元素构造函数,其名称是动态计算的(比如@dirkk是使用)。
当您知道此元素始终称为“节点”时,您可以执行以下操作(使用固定节点名称):
element Node { /Node/@* }
如果您还想要包含(直接)文字儿童:
element Node { /Node/@*, /Node/text() }
如果您需要支持任意元素名称:您无法在SQL Server中使用XQuery执行此操作。
答案 1 :(得分:0)
您可以编写一个函数来执行此操作:
declare function local:strip-children($e as element()*) as element()* {
element {node-name($e)} {$e/@*}
};
local:strip-children(/Node)
当然,如果没有这样的功能,你也可以这样做:
element {node-name(/node)} {/Node/@*}
因此,您只需内联函数中的代码即可。但是,在我看来,函数方法更加可重用。