在遍历文档时使用 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)

可能就是您要找的。