首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从XSLT调用XQuery,在XQuery中动态构建XSLT?

从XSLT调用XQuery,在XQuery中动态构建XSLT?
EN

Stack Overflow用户
提问于 2018-10-23 11:06:32
回答 1查看 765关注 0票数 0

环境: eXist-db 4.2.1,XQuery 3.1,XSLT2.0

我需要使用XQuery在eXist-DB中执行XSLT转换。XSLT需要在数百个文档中搜索节点属性值上的匹配。从eXist seems to not work中的XSLT调用collection()

我已经对解决这个问题的其他方法做了一些探索,由于找不到任何东西,我在这里发布了两个问题:

  1. 可以从XQuery动态地编写和转换XSLT,从而允许我从XQuery本身动态注入值( xquery transform:transform()上的参数在这里是不够的)
  2. 是否有可能以任何方式从(eXist) XQuery文档/函数调用/检索结果?

谢谢您的意见和参考。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-23 18:19:38

由于XSLT是XML,使用XQuery,您当然可以动态构造XSLT,并注入您在XQuery其他地方收集的数据,显然,下面是一个愚蠢的示例,但它在XQuery中构造了一些数据,动态地创建了XSLT样式表,将其中的一些数据直接插入为参数值,然后运行XSLT:

代码语言:javascript
复制
declare namespace xsl = "http://www.w3.org/1999/XSL/Transform";

let $elements := (1 to 3)!<root><data>{.}</data></root>,
    $stylesheet := 
      <xsl:stylesheet version="2.0">
        <xsl:param name="data-elements" as="element()*">{$elements!data}</xsl:param>
        <xsl:template match="@* | node()">
          <xsl:copy>
             <xsl:apply-templates select="@* | node()"/>
          </xsl:copy>
        </xsl:template>
        <xsl:template match="foo[. = $data-elements]"/>
      </xsl:stylesheet>,
    $input := <root><list><foo>a</foo><foo>2</foo><foo>10</foo><foo>1</foo></list></root>
return transform:transform($input, $stylesheet, ())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52947485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档