MarkLogic - 如何将元素插入XML

时间:2017-06-02 12:04:18

标签: xquery marklogic xpath-2.0

如何在XML中插入节点。

let $a := <a><b>bbb</b></a>)
return
      xdmp:node-insert-after(doc("/example.xml")/a/b, <c>ccc</c>);

预期产出:

<a><c>ccc</c><b>bbb</b></a>

请帮助获得输出。

3 个答案:

答案 0 :(得分:1)

你应该使用 $('#event_add').click(function(e){ e.preventDefault(); //suppress default behavior $.ajax({ type: 'GET', url: '@Url.Action("Agenda", "GetTareas")', // don't hard code your urls data: { region: $('#lstRegion option:selected').html(), solicitud: $('#lstSolicitud option:selected').html() }, // pass the value to the id parameter dataType: 'json', // your returning a view, not json success: function (data) { console.log(data); }}); }); 我相信以下方式:

xdmp:node-insert-before

答案 1 :(得分:1)

节点是不可变的,因此只能通过创建新副本来完成内存中的突变。

副本可以使用原始的未经修改的包含节点:

declare function local:insert-after(
    $prior as node(),
    $inserted as node()+
) as element()
{
    let $container := $prior/parent::element()
    return element {fn:node-name($container)} {
        $container/namespace::*,
        $container/attribute(),
        $prior/preceding-sibling::node(),
        $prior,
        $inserted,
        $prior/following-sibling::node()
    }
};

let $a := <a><b>bbb</b></a>
return local:insert-after($a//b, <c>ccc</c>)

在内存中创建副本然后插入副本比在数据库中插入和修改文档更快。

根据插入的文档数量,差异可能很大。

有社区库可以复制更改,但有时编写快速函数很容易(必要时递归)。

答案 2 :(得分:0)

您可以使用以下代码将元素插入XML:

xdmp:node-insert-child(fn:doc('directory URI'),element {fn:QName('http://yournamesapce','elementName') }{$elementValue})

在这里,我们使用fn:QName删除了添加节点中添加的xmlns=""