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

时间:2015-12-09 23:59:11

标签: 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>
      <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

然后插入正常工作,但是,对于外部变量,每个作为保留xml字符的字符被转换为xml转义字符序列,例如,     例如:&lt;变成&amp; lt;

我通过使用函数xquery:eval($ part)包装变量成功地使它工作,但这对我来说就像一个黑客。

我应该使用除xs:string之外的其他类型来阻止翻译吗? 或者是否需要使用外部变量来防止翻译。 我还尝试用CDATA包装$ part xml内容,但xml仍然转换为转义字符。

1 个答案:

答案 0 :(得分:3)

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