使用 BaseX POST 方法在 xquery 中传递 < >

Passing < > in xquery with BaseX POST method

我正在使用 POST 方法更新 BaseX 数据库,我想将 xml 节点插入到 calastone 数据库中的现有文档 calastone.xml 中,如果该节点包含 '< ', returns 一个错误 ”第 6 行):与元素类型 "variable" 关联的属性 "value" 的值不得包含“<”字符。“

代码:

<query>
<text>
    let $message := '<Id>CTN53</Id>'
     return insert nodes $message as last into doc("calastone/calastone.xml")
</text>
<variable name='message' value='<Id>CTN53</ID>'/>
</query>

不带“<”的相同代码会正确添加文本。

如何解决这个问题?

出现在属性和文本节点中的尖括号需要转义。对于属性,您应该使用 &lt;&gt;。对于文本节点,CDATA 部分通常更方便:

<query>
  <text><![CDATA[
    let $message := '<Id>CTN53</Id>'
    return insert nodes $message as last into doc("calastone/calastone.xml")
  ]]></text>
  <variable name='message' value='&lt;Id&gt;CTN53&lt;/ID&gt;'/>
</query>

参见例如What characters do I need to escape in XML documents? 更多示例。