XSLT 3.0 流式传输(撒克逊)

2024-02-10

我有一个很大的 XML 文件(6 GB),其中包含这种树:

<Report>
   <Document>
      <documentType>E</documentType>
      <person>
         <firstname>John</firstname>
         <lastname>Smith</lastname>
      </person>
   </Document>
   <Document>
      [...]
   </Document>
   <Document>
      [...]
   </Document>
   [...]
</Report>

如果我在其上应用 XSLT 样式表,则会出现以下错误:

线程“main”中的异常 java.lang.OutOfMemoryError:Java 堆空间

所以我想尝试新的 XSLT 3.0 功能:使用 Saxon 9.6 EE 进行流式处理。 我不想在文档中出现一次流限制。我认为,我想做的,非常接近此处描述的“突发模式”:http://saxonica.com/documentation/html/sourcedocs/streaming/burst-mode-streaming.html http://saxonica.com/documentation/html/sourcedocs/streaming/burst-mode-streaming.html

这是我的撒克逊命令行:

java -cp saxon9ee.jar net.sf.saxon.Transform -t -s:input.xml -xsl:stylesheet.xsl -o:output/output.html

这是我的 XSLT 样式表:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
<xsl:mode streamable="yes" />

<xsl:template match="/">
    GLOBAL HEADER
        <xsl:iterate select="copy-of()/Report/Document" >
           DOC HEADER
           documentType: <xsl:value-of select="documentType"/>
           person/firstname: <xsl:value-of select="person/firstname"/>
           DOC FOOTER
           <xsl:next-iteration/>
        </xsl:iterate>
    GLOBAL FOOTER
</xsl:template>

</xsl:stylesheet>

但我仍然有同样的内存不足错误。

感谢您的帮助!


您的 copy-of() 正在复制上下文项,即整个文档。你要

copy-of(/Report/Document)

依次复制每个文档。或者我倾向于这样写

/Report/Document/copy-of()

因为我认为这可以让人们更清楚地了解正在发生的事情。

顺便说一下,这里不需要 xsl:iterate:xsl:for-each 会很好地完成这项工作,因为一个文档的处理不依赖于任何先前文档的处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XSLT 3.0 流式传输(撒克逊) 的相关文章

随机推荐

  • 具有大数据集的 DC 和交叉过滤器

    我一直在研究 dc 和 crossfilter js 目前有一个包含 550 000 行 大小为 60mb csv 的大型数据集 并且面临着很多问题 例如浏览器崩溃等 因此 我试图了解 dc 和 crossfilter 如何处理大型数据集
  • 通过 JNI 从 C++ 调用返回字符串的 java 函数 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 C 应用程序中访问 Java 方法 https stackoverflow com questions 992836 how to access the java method in a c
  • 当 __builtin_memcpy 替换为 libc 的 memcpy 时

    有一个C99 posix版本memcpy海湾合作委员会的功能 builtin memcpy 有时它可以被 GCC 替换为 memcpy 的内联版本 而在其他情况下它可以通过调用 libc 的 memcpy 来替换 例如 有人指出here h
  • MVC2 <%: 标签与 <%= 有何不同

    区别在于 在 MVC2 出现之前 为了对字符串进行 HTML 编码 您必须在视图中使用 Html Encode 方法 然而 在 MVC2 中 他们添加了 根据经验 你应该always使用 查看顾斯科特的博客 http weblogs asp
  • 获取控件相对于整个屏幕的位置?

    假设我有一个 Control 它的位置是相对于它的父级的 如果它嵌入了很多次并且是主窗体的曾曾孙 我如何确定它在整个屏幕上的位置 而不仅仅是它在直接父窗体中的位置 这是为了通过屏幕截图打印特定控件 因为对于某些控件 DrawToBitmap
  • Apple 配置不再适用于 Visual Studio 2022 17.2

    我打算在 Visual Studio 2022 中下载更新的 Apple 开发人员证书和配置文件 新的证书和配置文件位于 Apple 开发者网站中 钥匙串和 Xcode 包含证书 在黄金岁月里 有自动配置在视觉工作室中 苹果决定不再支持这一
  • 使用 EWS 和 OAuth 2 的 Office 365 日历 API

    请参阅底部的编辑 我正在尝试使用 EWS 不是托管 API 使用 Office 365 API 在用户日历上创建 删除 更新事件 到目前为止 我已成功使用基本身份验证来验证我的 SOAP 请求是否有效 我现在尝试用 OAuth 2 替换 B
  • 将根元素添加到 json 响应 (django-rest-framework)

    我正在尝试确定使用 django 和 django rest framework 将根元素添加到所有 json 响应的最佳方法 我认为添加自定义渲染器是实现我想要实现的目标的最佳方法 这就是我到目前为止所想到的 from rest fram
  • 带有颜色选择器编辑器的 JavaFX 表格视图

    我有一个 TableView 它使用 ColorPicker 来 显示 编辑 单元格中的颜色 该表在所需字段中显示 ColorPicker 但编辑不起作用 TableColumn
  • Tag-it onlyAvalaibleTags 选项不起作用

    我使用 tag it 插件https github com aehlke tag it downloads https github com aehlke tag it downloads 如何禁用添加新标签 document ready
  • 使用 NestJS 和 Fastify 时多部分表单数据正文为空

    我们正在迁移自express to fastify in our nestJS应用 这multipart form data后置控制器中支持的 json 正文而不是文件 在迁移后不起作用 我们有typeorm swagger也已插入 如有任
  • 无法在 Visual Studio 2015 中运行 WCF 服务应用程序

    我正在尝试创建我的第一个 WCF 服务应用程序 但无法让它从 Visual Studio 2015 运行 这是我点击运行时出现的错误 我正在遵循教程 我认为他们跳过了一些步骤 但这是我添加到 web config 中的内容
  • InlineUIContainer 问题中的 WPF XAML 按钮单击处理程序

    我有一个 FlowDocument 其中包含一些如下元素
  • WndProc 没有可见的形式?

    我想在第二个线程上创建一个表单 该线程将在其 WndProc 方法中接收消息 创建这样的隐形表单的推荐方法是什么 设置 ShowInTaskbar false 和 Visible false 是否足够 或者是否有 更干净 的方法 我不确定你
  • 鼠标滚轮事件 (C#)

    我无法在主窗体中获取鼠标滚轮事件 作为演示 我想出了一个简单的例子 public partial class Form1 Form public Form1 InitializeComponent this panel1 MouseWhee
  • 使用不同的损失函数恢复训练

    我想实施一个两步学习过程 使用损失函数预训练几个时期的模型loss 1 将损失函数更改为loss 2并继续进行微调训练 目前 我的做法是 model compile optimizer opt loss loss 1 metrics acc
  • 打瞌睡模式处理

    我正在开发一个应用程序 它使用 AlarmManager 在后台生成一些服务 时机对于我们的应用程序非常重要 并且功能不能等待下一个维护窗口的发生 要求用户将应用程序列入白名单不是问题 但不能解决暂停警报的问题 此外 电池消耗也不是一个大问
  • 有没有办法将 Facebook Presto 0.131 与 Cassandra 3.0.0 一起使用?

    使用 Presto 0 131 查询 Cassandra 3 0 0 集群时 我得到 所有尝试查询的主机均失败 snip InvalidQueryException 未配置的表 schema keyspaces 我认为这是由于 Cassan
  • 在 sqlalchemy 中使用 postgresql JSON 类型的列表

    我正在使用金字塔与 sqlalchemy pyramid tm 和 postgresql 来测试这一点 DBSession scoped session sessionmaker extension ZopeTransactionExten
  • XSLT 3.0 流式传输(撒克逊)

    我有一个很大的 XML 文件 6 GB 其中包含这种树