xquery - XQUERY:如何使用目录中的所有元素进行转换
问题描述
我正在构建一个应用程序,显然我需要将下面 $xml 中的所有文件从 xml 转换为 html,并带有一定的 xslt。然后我希望它们输出为<li> <!-- the transformed output --> </li>
declare function app:XMLtoHTML-forAll ($node as node(), $model as map(*), $query as xs:string?){
let $ref := xs:string(request:get-parameter("document", ""))
let $xml := doc(concat("/db/apps/BookOfOrders/data/edition/",$ref))
let $xsl := doc("/db/apps/BookOfOrders/resources/xslt/xmlToHtml.xsl")
let $params :=
<parameters>
{for $p in request:get-parameter-names()
let $val := request:get-parameter($p,())
where not($p = ("document","directory","stylesheet"))
return
<param name="{$p}" value="{$val}"/>
}
</parameters>
for $doc in collection("/db/apps/BookOfOrders/data/edition")/tei:TEI
return
<li> {transform:transform($xml, $xsl, $params)} </li>
};
但是,我的函数<li></li>
为我在此文件夹中的每个文档返回空元素。谁能暗示我做错了什么?
小编辑:它也不使用所有文件,而只使用似乎随机选择的文件并一遍又一遍地转换它......
解决方案
我将首先验证分配给的内容$xml
let $xml := doc(concat("/db/apps/BookOfOrders/data/edition/",$ref))
并将其与$doc
for 循环中分配的内容进行比较:
for $doc in collection("/db/apps/BookOfOrders/data/edition")/tei:TEI
为什么要遍历每个$doc
然后进行相同的转换$xml
?
<li> {transform:transform($xml, $xsl, $params)} </li>
您是否打算改为转换$doc
?也许还使用$ref
来构造集合 URI?
推荐阅读
- asp.net - 我们可以在每个函数中对这些重复的代码做些什么吗?
- javascript - TypeScript - 实用方法中的错误
- javascript - 在jQuery中将localStorage数据更改为html列表标签
- java - 未在 OpenGL ES 3.0 中渲染的无纹理四边形
- apache-flink - Flink 如何动态添加第三方依赖?
- kubernetes - 如何获取一堆短期 Kubernetes 作业的指标
- css - 如何解决 Google Search Console 中“可点击元素靠得太近”的问题
- git - 如何对他人的回购大师提出拉取请求?(已创建新分支)
- ios - SwiftUI:如何调整大小以适应 Button 以展开以填充 VStack 或 HStack 父视图?
- c++ - C++ RapidJson 帮助反序列化数组对象