XQUERY: Как использовать все элементы в каталоге для преобразования - PullRequest
1 голос
/ 13 января 2020

Я создаю приложение, в котором мне нужно преобразовать все файлы в $ 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> -элементы для каждого документа, который есть в этой папке. Кто-нибудь может намекнуть мне на то, что я делаю неправильно?

Small Edit: он также не использует все файлы, а только то, что кажется случайным образом выбирает один и преобразует это снова и снова ...

1 Ответ

1 голос
/ 13 января 2020

Я бы сначала проверил, что присваивается $xml

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

, и сравнил бы это с тем, что присваивается $doc в вашем для l oop:

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

Зачем повторять каждый $doc и затем преобразовывать один и тот же $xml?

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

Вы намеревались вместо этого преобразовать $doc? Может также использовать $ref для создания URI коллекции ??

...