xquery从外部xs:string变量(basex)插入节点

xquery从外部xs:string变量(basex)插入节点,xquery,basex,Xquery,Basex,我试图使用BaseX将新元素插入xml文档 declare variable $part external; insert nodes $part as first into db:open("PARTDB")/assembly[@name="ZB09010"] 我正在使用BaseX GUI进行测试,并且已经定义了$part变量(通过单击$icon) 如果我使用“局部”变量,例如 let $up := <Employee Name="Joe"> <Personal&

我试图使用BaseX将新元素插入xml文档

declare variable $part external; 
insert nodes $part as first into db:open("PARTDB")/assembly[@name="ZB09010"]
我正在使用BaseX GUI进行测试,并且已经定义了$part变量(通过单击$icon)

如果我使用“局部”变量,例如

let $up := <Employee Name="Joe">
    <Personal>
      <SSN>666-66-1234</SSN>
    </Personal>
    <StaffInfo>
      <Position>Doctor</Position>
      <AccountableTo>Jeff</AccountableTo>
    </StaffInfo>
  </Employee>
  return
insert node $up as last into doc('office')/Staff
let$up:=
666-66-1234
医生
杰夫
返回
将节点$up作为最后一个插入到文档('office')/Staff中
但是,如果使用外部变量,则insert将正确工作,作为保留xml字符的每个字符都将转换为xml转义字符序列,例如。 例如:<变成

通过使用函数xquery:eval($part)包装变量,我成功地实现了这一点,但我觉得这就像是一个黑客

是否应该使用xs:string以外的类型来阻止转换? 或者是否有一些函数需要与外部变量一起使用以防止转换。
我还尝试用CDATA包装$part xml内容,但xml仍然转换为转义字符。

在我看来,您为$part提供的值似乎不是节点,而是包含词法xml的字符串。将词法XML转换为节点树称为解析,因此需要解析字符串以创建节点(树)。您可以通过调用fn:parse xml函数来实现这一点。

我尝试了fn:parse xml函数,我的xml有一个名称空间前缀,parse xml函数返回一个错误我尝试了fn:parse xml函数,我的xml有一个名称空间前缀(asy),parse xml函数返回一个错误FODC0006(第1行):元素“asy:part”的前缀“asy”不受约束。若在xml前面添加asy的declare namespace语句,则会得到另一个错误FODC0006(第1行):prolog中不允许包含内容。但是,如果我使用query:eval($part)函数,它似乎可以工作。如果内容具有未声明的名称空间前缀,那么parse-xml拒绝它是完全正确的。query:eval()听起来像一个供应商扩展,所以它可以做任何它喜欢的事情。