Xquery - 这里有什么问题

Ben*_*Ben 1 xquery sequence marklogic

我希望节点替换为$ person变量.我需要改变什么?

以下代码应将序列中人员的名称更改为X.

declare function local:ChangeName($person)
{
  xdmp:node-replace($person//Name/text, text { "X" } )

  <p>{$person}</p>
};

let $b := <Person>
      <Name>B</Name>
      <IsAnnoying>No</IsAnnoying>
  </Person>

let $j := <Person>
      <Name>J</Name>
      <IsAnnoying>No</IsAnnoying>
  </Person>

let $people := ($b, $j)

return $people ! local:ChangeName(.)
Run Code Online (Sandbox Code Playgroud)

ehe*_*num 5

xdmp:node-replace() 仅对持久文档进行操作,而不对内存中的文档进行操作.

您的local:ChangeName()函数可以构造Person和Name元素,但复制IsAnnoying元素,如:

declare function local:ChangeName($person)
{
  <p>
  <Person>
  <Name>X</Name>
  {$person//IsAnnoying}
  </Person>
  </p>
};
Run Code Online (Sandbox Code Playgroud)

对于更复杂的转换,请考虑递归类型切换或XSLT转换.