xquery:如何以相同的方式转换多个文件,但对一个文件进行特殊处理

标签 xquery exist-db

这是我将目录中的每个文件制作为轮播( Bootstrap )的转换,但是,对于第一个文件(Folio001.xml),我需要将类“active”添加到文件的最后一行代码

    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
            <div class="carousel-item"> {transform:transform($doc, $xsl, $params)} </div>
}; 

有没有一种简单的方法可以在不更改大部分代码的情况下做到这一点? 我在想某事。像这样:

if(file-name="Folio001.xml") 
       return
        <div class="carousel-item active"> {transform:transform($doc, $xsl, $params)} </div>
 else            
       return
        <div class="carousel-item"> {transform:transform($doc, $xsl, $params)} </div>

提前致谢, K

最佳答案

无需重复所有 div 结构,只需将“active”值的条件移动到 @class 属性构造函数内即可:

<div> {
  attribute {"class"} {"carousel-item", if (file-name="Folio001.xml") then "active" else () },
"transform:transform($doc, $xsl, $params)"
} </div>

关于xquery:如何以相同的方式转换多个文件,但对一个文件进行特殊处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60209735/

相关文章:

sql - XML 模式集合破坏了 xquery

javascript - 登录/注销后强制所有页面访问刷新/清除缓存

xpath - 使用 XPath 谓词优化 XQuery 查询

java - 在 Java 中重命名 eXist-db 中的集合

xquery - 使用 XQuery 进行递归的示例

xml - 检测 xml 中的间隙/第一个可用 ID :id sequence with XQuery/Xpath

xml - 如何解决 Marklogic 中的 'Conflicting Update' 错误

linq - 任何人都知道任何 Linq to XQuery 实现?

json - 将 xquery 结果存储为 json

xquery - 如何修改 eXist-db 中的内存文档?