【问题标题】:xquery insert node from external xs:string variable (basex)xquery 从外部 xs 插入节点:字符串变量(basex)
【发布时间】:2016-03-15 11:11:58
【问题描述】:

我正在尝试使用 BaseX 将新元素插入到 xml 文档中。

declare variable $part external; 
insert nodes $part as first into db:open("PARTDB")/assembly[@name="ZB09010"]

我使用 BaseX GUI 进行测试并定义了 $part 变量(通过单击 $ 图标)。

如果我使用“本地”变量,例如

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 转义字符序列,例如 示例:

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

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

【问题讨论】:

    标签: xquery basex


    【解决方案1】:

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

    【讨论】:

    • 我试过fn:parse-xml函数,我的xml有命名空间前缀,parse-xml函数返回错误
    • 我尝试了 fn:parse-xml 函数,我的 xml 有一个命名空间前缀 (asy),而 parse-xml 函数返回错误 FODC0006 (第 1 行): The prefix "asy" for element " asy:part" 不受约束。如果我在 xml 之前为 asy 添加一个声明命名空间语句,我会得到一个不同的错误 FODC0006(第 1 行):prolog 中不允许内容。但是,如果我使用 query:eval($part) 函数,它似乎可以工作。
    • 如果内容有一个未声明的命名空间前缀,那么 parse-xml 拒绝它是完全正确的。 query:eval() 听起来像是一个供应商扩展,所以它可以做任何它喜欢的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多