首页 > 解决方案 > 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>为我在此文件夹中的每个文档返回空元素。谁能暗示我做错了什么?

小编辑:它也不使用所有文件,而只使用似乎随机选择的文件并一遍又一遍地转换它......

标签: xqueryexist-db

解决方案


我将首先验证分配给的内容$xml

let $xml := doc(concat("/db/apps/BookOfOrders/data/edition/",$ref))

并将其与$docfor 循环中分配的内容进行比较:

for $doc in collection("/db/apps/BookOfOrders/data/edition")/tei:TEI

为什么要遍历每个$doc然后进行相同的转换$xml

<li> {transform:transform($xml, $xsl, $params)} </li>

您是否打算改为转换$doc?也许还使用$ref来构造集合 URI?


推荐阅读