微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法在转换时执行的 XSLT 样式表中包含 Xquery?

如何解决有没有办法在转换时执行的 XSLT 样式表中包含 Xquery?

我有一个 XML 文件,我一直在尝试同时使用 xQuery 和 XSLT 对其进行转换。

该文档基本上根据 TEI 标准对两种不同类型的文本进行编码。第一部分是我写的一篇史诗的文献学研究,第二部分是该诗的学术版。

<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 的组合轻松创建这些表:

<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 转换时)都应该这样做。

我尝试将代码组合如下:

<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?),这对我的问题没有帮助。

有没有办法把这两个代码结合起来?

预先感谢您的帮助!

解决方法

有多种方法可以组合 XSLT 和 XQuery。您可以在同一管道中拥有 XSLT 任务和 XQuery 任务,或者您可以从 XSLT 调用 XQuery 函数(例如在 XSLT 3.0 中使用 load-xquery-module())。但是对于您所描述的情况,最简单的方法是将 FLWOR 表达式替换为等效的 xsl:for each:

<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>

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?