如何插入XML text()值作为另一个XML元素的值

时间:2016-08-29 12:37:33

标签: xquery

我正在尝试在XML数据类型中插入新的XML元素,但是这个新的XML元素必须包含另一个XML元素的值。例如,给定以下XML:

<Config>
    <SomeOtherNode>
        <ValueToUse>123</ValueToUse>
    </SomeOtherNode>
</Config>

应该呈现以下内容:

<Config>
    <Node1>123</Node1>
    <SomeOtherNode>
        <ValueToUse>123</ValueToUse>
    </SomeOtherNode>
</Config>

我尝试了以下但没有运气(它将XQuery作为实际值插入):

update Table
set Column.modify('insert <Node1>//SomeOtherNode/ValueToUse/text()</Node1> as first into /Config')

1 个答案:

答案 0 :(得分:1)

XQuery使用花括号来表示包含的表达式,将内容表达式与文本文本区分开来。要修复查询,请使用大括号括起所附表达式:

<Node1>{ //SomeOtherNode/ValueToUse/text() }</Node1>

(花括号内的空白只是为了视觉清晰,不需要。)

花括号的目的在https://www.w3.org/TR/xquery-31/#doc-xquery31-EnclosedExpr的规范中定义:

  

定义:封闭表达式 EnclosedExpr 制作的一个实例,它允许在花括号中使用可选表达式。

EnclosedExpr       ::=      "{" Expr? "}"
  

定义:在封闭的表达式中,括在花括号中的可选表达式称为内容表达式