首页 > 解决方案 > Exist-db 用 XQUERY 添加节点

问题描述

我有一个 listPers.xml(显然包含人员的 TEI 列表)。我想编写一个函数来更新 listPers.xml 我的函数如下所示:

declare function app:addPerson($node as node(), $model as map(*)) {
    let $person := "<person xml:id=""><persName><forename>Albert</forename><surname>Test</surname></persName></person>"
    let $list := doc(concat($config:app-root, '/resources/listPers_test.xml'))
    return 
    update insert $person into $list//tei:listPerson
};

而且 listPerson.xml 看起来或多或少像一个带有人员条目的典型列表我有一个 tei:header (这里省略),然后是

  <text>
        <body>
            <listPerson xml:id="person">
                <person xml:id="abbadie_jacques">
                    <persName ref="http://d-nb.info/gnd/100002307">
                        <forename>Jacques</forename>
                        <surname>Abbadie</surname>
                    </persName>
                    <note>Prediger der französisch-reformierten Gemeinde in <rs type="place" ref="#berlin">Berlin</rs>
                    </note>
                </person>
</body>
</text>
</TEI>

(很抱歉破坏了缩进,这只是一个摘录)我没有收到错误,这意味着我的 app:addPerson 应该没问题,对吧?我希望 listPers_test 看起来像这样:

   <text>
        <body>
            <listPerson xml:id="person">
                <person xml:id="abbadie_jacques">
                    <persName ref="http://d-nb.info/gnd/100002307">
                        <forename>Jacques</forename>
                        <surname>Abbadie</surname>
                    </persName>
                    <note>Prediger der französisch-reformierten Gemeinde in <rs type="place" ref="#berlin">Berlin</rs>
                    </note>
                </person>
    <!-- here comes the output that I wish to have :-) -->
    <person xml:id=""><persName><forename>Albert</forename><surname>Test</surname></persName></person>
    </body>
    </text>
    </TEI>

从长远来看,我的目标是允许用户输入名称等的 html 表单,其中 id 是使用 sth 生成的

to-lowercase(concat($surname, "_", $forename));

但我不会讨论有关表单和 xquery 的问题,因为我几乎没有完成关于 html 表单和 xquery 的快速 Google 之旅!

谁能提示我为什么我没有用第二个值更新 listPers_test.xml 文件?:-)

一切顺利,并提前感谢大家,K

标签: xqueryexist-db

解决方案


好的,我为任何对此感兴趣的人提供了一个解决方案:

我的第一个片段$person:= ...包含一个字符串,而不是一个元素。换行

 let $person := "<person xml:id=""><persName><forename>Albert</forename><surname>Test</surname></persName></person>"

这实际上解决了这个问题:

 let $person := <tei:person xml:id=""><persName><forename>Albert</forename><surname>Test</surname></persName></tei:person>

推荐阅读