首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在XSLT样式表中是否有一种方法可以在转换时执行Xquery?

在XSLT样式表中是否有一种方法可以在转换时执行Xquery?
EN

Stack Overflow用户
提问于 2021-03-24 13:40:34
回答 1查看 252关注 0票数 1

我有一个XML文件,我一直试图同时用xQuery和XSLT进行转换。

该文档基本上按照TEI标准编码两种不同类型的文本。第一部分是我写的关于史诗的文献学研究,第二部分是这首诗的学术版本。

代码语言:javascript
复制
<text>
<front><!-- chapters of the study --></front>
<body>
<lg n="1">
<l n="1.a">first line of the poem</l>
<l n="1.a">second line with <distinct>interesting stuff</distinct></l></lg>
<!-- rest of the poem-->
</body></text>

我的主要目标是使用XSLT将其转换为格式良好的html文档,并且在大多数情况下它都能工作。现在,研究讨论了版本中的数据(“我们的诗中经常出现这种有趣的东西,如下表所示”)。由于所有“有趣的内容”都是标记出来的(参见上面的示例),我可以使用HTML和xQuery的组合轻松地创建这些表:

代码语言:javascript
复制
<table>
<tr>
<td>Verse Number</td>
<td>Interesting Stuff</td>
<tr>
for $case in doc("mydocument.xml")//distinct
return
<tr>
<td>{data($case/ancestor::l/@n)}</td>
<td>$case</td></tr></table>

现在最简单的方法是更改xQuery,这样它将创建一个符合TEI的xml表,并手动将其复制到文档中。然后,XSLT将顺利地工作,就像它用于我所拥有的少数静态表一样。但是我的大多数表都应该是动态的,如果我在版本中更改了某些内容,我希望数字发生变化。每次新读取器在浏览器中打开格式化文本时(即每次执行XSLT转换时)都应该这样做。

我尝试按以下方式组合代码:

代码语言:javascript
复制
<xsl:template match="table[type='query']">
{ (: the xQuery-html instructions from above go here :) }
</xsl template>

我在正确的位置创建了一个表,但是在它之前和单元格中,它只是重复xQuery指令。我一直在寻找类似的问题,但我只发现了相反的过程,即如何使用xQuery创建XSLT (例如:calling XQuery from XSLT, building XSLT dynamically in XQuery?),这无助于解决我的问题。

有办法把这两种代码结合起来吗?

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-24 16:57:50

有多种方法可以组合XSLT和XQuery。可以将XSLT任务和XQuery任务放在同一个管道中,也可以从XSLT调用XQuery函数(例如,使用XSLT3.0中的())。但是对于您所描述的情况,最简单的方法是将FLWOR表达式替换为等效的xsl:。

代码语言:javascript
复制
<xsl:for-each select='doc("mydocument.xml")//distinct'>
  <xsl:variable name="case" select="."/>
  <tr>
    <td>{$case/ancestor::l/@n}</td>
    <td>{$case}</td>
  </tr>
</xsl:for-each>

注意:XSLT3.0允许使用花括号语法(您需要指定展开-text=“yes”),但语义与XQuery (它的意思是"value-of“而不是"copy-of”)略有不同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66782307

复制
相关文章

相似问题

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