每本书中的chapter-metadata.xml
商店isbn文件夹(有100个isbn文件夹,因此有100个chapter-metadata.xml
)存储在marklogic数据库服务器和chapter-metadata中。 Xml要么包含一章的数据,要么为空。如果chapter-metadata.xml
只包含一个章节信息,那么我想在章节元素下添加更多章节信息(我的章节信息对于所有章节是通用的),该章节元素的属性和值直到书籍isbn文件夹中有多少章节存储(我可以获取并存储在变量$chapter_sequence
中,如ch001 ch002 ch003 ch004 ..)或如果chapter-metadata.xml
没有任何chaper信息,那么它将创建具有属性和章节编号值的章节元素并添加我的信息,下面我有一些xml结构,如果有一个章节信息,我的信息来自元素keywordset
<?xml version="1.0" encoding="UTF-8" ?>
<chaptermetadata>
<bookisbn>isbn number</bookisbn>
<booktitle>Copyright</booktitle>
<chapter id="ch001"">
<keywordset>
<keyword role="primary">context</keyword>
<keyword role="secondary">Copyright</keyword>
<keyword role="tertiary">subject</keyword>
</keywordset>
</chapter>
</chaptermetadata>
我想要如下:
<?xml version="1.0" encoding="UTF-8" ?>
<chaptermetadata>
<bookisbn>isbn number</bookisbn>
<booktitle>Copyright</booktitle>
<chapter id="ch001"">
<keywordset>
<keyword role="primary">context</keyword>
<keyword role="secondary">Copyright</keyword>
<keyword role="tertiary">subject</keyword>
</keywordset>
</chapter>
<chapter id="ch002"">
<keywordset>
<keyword role="primary">context</keyword>
<keyword role="secondary">Copyright</keyword>
<keyword role="tertiary">subject</keyword>
</keywordset>
</chapter>
so on to last chapter which I store in veriable
</chaptermetadata>
感谢,
raj
答案 0 :(得分:2)
这个问题难以理解,但从http://docs.marklogic.com/xdmp:directory和FLWOR表达开始。假设你把它放到一个函数中。我将手动一些你必须实现的辅助函数,但函数可能看起来像这样:
declare function chaptermetadata($isbn as xs:string)
as element(chaptermetadata) {
<chaptermetadata>
{
<bookisbn>{ $isbn }</bookisbn>
<booktitle>{ title($isbn) }</booktitle>
for $chapter in xdmp:directory(isbn-uri($isbn), 'infinity')
return element { fn:node-name($chapter) } {
$chapter/@*,
$chapter/keywordset }
}
<chaptermetadata>
};
现在,除非您了解它正在做的所有事情,否则此代码将无济于事,因此您可以根据自己的需要对其进行修改。这是其中一个XQuery用例的变体,因此您可能会发现有助于解决这些问题:http://www.w3.org/TR/xquery-use-cases/