【问题标题】:How to change the name of element in MarkLogic如何更改 MarkLogic 中元素的名称
【发布时间】:2019-07-18 06:57:39
【问题描述】:

我想做这个改变

发件人:

〈aaa〉 bbbbbb 〈/aaa〉

收件人:

bbbbbb 〈/bbb〉

通过使用 MarkLogic、XQuery。

怎么做?

【问题讨论】:

    标签: xml xquery marklogic


    【解决方案1】:

    这可以使用xdmp:node-replace() 来完成 参考-xdmp:node-replace

    HTH!

    【讨论】:

      【解决方案2】:

      最简单的做法是经常使用xdmp:node-replace。但是,这假设您要修改的数据已经在数据库的文档中,并且您没有对该文档执行任何冲突的更新。

      当无法使用 xdmp:node-replace 时,下一个最佳选择是修改内存中的文档,然后将整个文档插入到数据库中。

      修改内存中文档的最简单方法是使用XQuery Memory Operations library中的mem:replace。

      在内存中修改文档的最高效方法是编写针对该文档结构优化的recursive descent tree

      【讨论】:

        【解决方案3】:

        如果节点不在文档中,总是有幼稚的做法:

        〈aaa〉 bbbbbb 〈/aaa〉 ! <bbb>{.}</bbb>
        

        【讨论】:

          【解决方案4】:

          XSLT 也内置在服务器中。

          【讨论】:

            【解决方案5】:
            xquery version "1.0-ml";
            xdmp:document-insert("/test1.xml",
            <root>
            <child1>
            <aaa>bbbbbb</aaa>
            </child1>
            </root>
            );
            doc("/test1.xml");
            xdmp:node-replace(doc("/test1.xml")/root/child1/aaa,<bbb>bbbbbb</bbb>);
            doc("/test1.xml");
            

            【讨论】:

            • 如果要将aaa节点的所有内容复制到bbb节点,那么node-replace应该是xdmp:node-replace(doc("/test1.xml")/root/child1/aaa,&lt;bbb&gt;{doc("/test1.xml")/root/child1/aaa/node()}&lt;/bbb&gt;);
            猜你喜欢
            • 2010-10-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-22
            • 1970-01-01
            相关资源
            最近更新 更多