没有子项的SQL Server XML Query元素

时间:2014-03-05 16:04:30

标签: sql-server xml xquery

我得到了以下XML:

<Node attr1="value1" attr2="value2">
    <SubNode SubAttr1="subValue1" subAttr2="subValue2" />
</Node>

我想知道是否有办法让XQuery表达式只返回<Node>元素。

<Node attr1="value1" attr2="value2"> <Node>

2 个答案:

答案 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/@*}

因此,您只需内联函数中的代码即可。但是,在我看来,函数方法更加可重用。