0

我正在尝试用一些文本替换一个节点以及其中的一个子节点。下面是我的 XQuery。我没有得到想要的结果。

for $x in collection('articles')//Doc[Title/@No='Article 20']
  return replace value of node $x/Desc with "Article on Molecular Physics 
  <Date @d='20130805'/> in continuation with Part 1."

期待——

....
<Desc>Article on Molecular Physics 
  <Date @d='20130805'/> in continuation with Part 1.</Desc>
....

但我得到-

....
<Desc>Article on Molecular Physics 
  &lt;Date @d='20130805'/&gt; in continuation with Part 1.</Desc>
....
4

2 回答 2

1

为了得到想要的结果,我先删除了节点,然后按如下方式插入——

 let $c := <Desc>Article on Molecular Physics <Date d='20130805'/> in continuation with Part 1.</Desc>
 for $x in collection('articles')//Doc[Title/@No='Article 20']
     return 
     (
         delete node $x/Desc,
         insert node $c after $x/Title 
     )

这对我有用:)

于 2013-08-06T06:01:29.710 回答
0

因为您在字符串中包含了新的 XML 元素,所以它被视为一个;即逃脱。尝试用元素中所需的节点序列替换字符串,如下所示:

for $x in collection('articles')//Doc[Title/@No='Article 20']
  return replace value of node $x/Desc with 
  ("Article on Molecular Physics ", <Date d='20130805'/>, " in continuation with Part 1.")
于 2013-08-05T14:54:33.240 回答