我无法弄清楚有点琐碎的事情!
我需要自动化TEI XML中的ePub包装。我知道如何使用compression
但不能以编程方式传递参数列表。问题是我想从一组divs
中获取一个列表,并将其作为参数传递给函数。
而不是
let $entries := (<entry>x</entry>, <entry>y</entry>)
compression:zip($entries, true())
我需要做类似
的事情let $header := (<header>xyz</header>)
let $divs := (
for $book in doc('./file.xml')
return $book//tei:div[@n='1']
)
let $entries := (
for $div in $divs
return <entry>{$div}</entry>
)
compression:zip($entries, $header, true())
我根本无法将提取的divs
作为逗号分隔的参数列表(作为压缩需求)。如果我可以使用像数组迭代或路径连接这样的东西,那就没关系了!
我非常接近
for $chapter at $count in doc('./bukwor.xml')//tei:div[@n='1']
return
<entry name="chapter-{$count}"> type="xml">{$chapter}</entry>
但仍然无法做到这一点。
答案 0 :(得分:1)
得到它(感谢https://en.wikibooks.org/wiki/XQuery/DocBook_to_ePub)。
compression:zip
函数采用逗号分隔的参数列表以及未分离的列表。这是合法的
let $chaps :=
(
for $chapter at $count in doc('./file.xml')//tei:div[@n='1']
return
<entry name="OEBPS/chapter-{$count}.xhtml" type="xml">{$chapter}</entry>
)
let $entries :=
(
<entry name="mimetype" type="text" method="store">application/epub+zip</entry>,
<entry>XYZ</entry>,
$chaps
)
最后一个$chaps
条目收集正确的文件并将其添加到存档。