在遍历文档时使用 xmldb:store 使用 xQuery 编写符合 TEI XML 的文件
Write TEI compliant XML File with xQuery using xmldb:store while iterating over documents
所以我需要遍历一组给定的 XML 文档,搜索编码错误,然后创建一个 XML 文件,该文件符合 TEI 标准并具有 table在它的正文中包含文件名和每个文件的错误结构如下:
<table xmlns="http://www.tei-c.org/ns/1.0" rows="30" cols="10">
<row role="label">
<cell role="data">file name</cell>
<cell role="data">error 1</cell>
<cell role="data">error 2</cell>
</row>
<row role="data">
<cell role="label">file 1</cell>
<cell role="data">xPath to error 1 in file 1</cell>
<cell role="data">xPath to error 2 in file 1</cell>
</row>
<row role="data">
<cell role="label">file 2</cell>
<cell role="data"><!-- empty if no error in file --></cell>
<cell role="data">xPath to error 2 in file 2</cell>
</row>
</table>
我的问题是写入结果文件。因为它需要符合 TEI,所以我需要一个 TEI 根节点等等。我只想将文件头写入文件一次,但需要遍历每个文档以获取错误。所以当我尝试时:
for $doc in $douments
(: whole bunch of code here to get the errors :)
let $output :=
<TEI xmlns="http://www.tei-c.org/ns/1.0">
(: everything put into the wanted order :)
</TEI>
return
xmldb:store("db/Output/", "result.xml", $output)
我自然只会得到 result.xml
中最后一个文件的错误,因为我遍历了每个文件,每次这样做时,它都会创建一个带有头部的新文件,但只有当前文件的错误文件。
我设法获得了正确的输出而无需将其写入文件(使用 oXygen)。
那么我怎样才能只写一次文件头呢?
我需要将它从 for 循环中取出来,但我找不到这样做的方法。我是 xQuery 的新手,被告知将输出写入变量并像上面那样使用它,但后来我遇到了这个问题。
有人可以帮我找到解决办法吗?提前致谢!
来自巴伐利亚的问候
如果要创建单个文档,则
let $output := document {
<TEI xmlns="http://www.tei-c.org/ns/1.0">
{
for $doc in $douments
(: whole bunch of code here to get the errors :)
}
</TEI>
}
return xmldb:store("db/Output/", "result.xml", $output)
可能就是您要找的。
所以我需要遍历一组给定的 XML 文档,搜索编码错误,然后创建一个 XML 文件,该文件符合 TEI 标准并具有 table在它的正文中包含文件名和每个文件的错误结构如下:
<table xmlns="http://www.tei-c.org/ns/1.0" rows="30" cols="10">
<row role="label">
<cell role="data">file name</cell>
<cell role="data">error 1</cell>
<cell role="data">error 2</cell>
</row>
<row role="data">
<cell role="label">file 1</cell>
<cell role="data">xPath to error 1 in file 1</cell>
<cell role="data">xPath to error 2 in file 1</cell>
</row>
<row role="data">
<cell role="label">file 2</cell>
<cell role="data"><!-- empty if no error in file --></cell>
<cell role="data">xPath to error 2 in file 2</cell>
</row>
</table>
我的问题是写入结果文件。因为它需要符合 TEI,所以我需要一个 TEI 根节点等等。我只想将文件头写入文件一次,但需要遍历每个文档以获取错误。所以当我尝试时:
for $doc in $douments
(: whole bunch of code here to get the errors :)
let $output :=
<TEI xmlns="http://www.tei-c.org/ns/1.0">
(: everything put into the wanted order :)
</TEI>
return
xmldb:store("db/Output/", "result.xml", $output)
我自然只会得到 result.xml
中最后一个文件的错误,因为我遍历了每个文件,每次这样做时,它都会创建一个带有头部的新文件,但只有当前文件的错误文件。
我设法获得了正确的输出而无需将其写入文件(使用 oXygen)。
那么我怎样才能只写一次文件头呢?
我需要将它从 for 循环中取出来,但我找不到这样做的方法。我是 xQuery 的新手,被告知将输出写入变量并像上面那样使用它,但后来我遇到了这个问题。
有人可以帮我找到解决办法吗?提前致谢!
来自巴伐利亚的问候
如果要创建单个文档,则
let $output := document {
<TEI xmlns="http://www.tei-c.org/ns/1.0">
{
for $doc in $douments
(: whole bunch of code here to get the errors :)
}
</TEI>
}
return xmldb:store("db/Output/", "result.xml", $output)
可能就是您要找的。