如何使用 XOM 传输 XML 数据?

2023-11-22

假设我想将大量搜索结果以 XML 的形式输出到 PrintWriter 或 OutputStream 中,使用XOM。生成的 XML 将如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<resultset>
    <result>
       [child elements and data]
    </result>
    ...
    ...
    [1000s of result elements more]
</resultset>

因为生成的 XML 文档可能很大(可能有数百兆字节),所以我想以流式传输方式输出它(而不是在内存中创建整个文档然后写入)。

输出的粒度<result>一次就可以了,所以我想生成一个<result>一个接着一个,并将其写入流中。换句话说,我只想做这样的伪代码(启用自动刷新,所以不用担心):

open stream/writer
write declaration
write start tag for <resultset>
while more results:
    write next <result> element
write end tag for <resultset> 
close stream/writer

我一直在看Serializer,但是必要的方法,writeStartTag(Element), writeEndTag(Element), write(DocType)受保护,不公开!除了子类化 Serializer 以便能够使用这些方法,或者手动将开始和结束标记作为字符串直接写入流中,完全绕过 XOM 之外,是否没有其他方法了? (在这个简单的例子中,后者不会太糟糕,但在一般情况下,它会变得相当难看。)

我是否遗漏了什么,或者 XOM 不是为此而设计的?

With dom4j我可以使用轻松做到这一点XMLWriter- 它有构造函数Writer or OutputStream、和方法writeOpen(Element), writeClose(Element), writeDocType(DocumentType)等 与 XOM 相比Serializer那里唯一的公众write方法是一种需要整体的方法Document.

(这与我关于最佳 dom4j 替代品的问题XOM 是一个强有力的竞争者。)


我遇到了同样的问题,但发现按照您提到的选项和子类序列化器执行操作非常简单,如下所示:

public class StreamSerializer extends Serializer {

    public StreamSerializer(OutputStream out) {
        super(out);
    }

    @Override
    public void write(Element element) throws IOException {
        super.write(element);
    }

    @Override
    public void writeXMLDeclaration() throws IOException {
        super.writeXMLDeclaration();
    }

    @Override
    public void writeEndTag(Element element) throws IOException {
        super.writeEndTag(element);
    }

    @Override
    public void writeStartTag(Element element) throws IOException {
        super.writeStartTag(element);
    }

}

然后你仍然可以利用各种 XOM 配置,如 setIdent 等,但使用方式如下:

Element rootElement = new Element("resultset");
StreamSerializer serializer = new StreamSerializer(out);
serializer.setIndent(4);
serializer.writeXMLDeclaration();
serializer.writeStartTag(rootElement);
while(hasNextElement()) {
    serializer.write(nextElement());
}
serializer.writeEndTag(rootElement);
serializer.flush();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 XOM 传输 XML 数据? 的相关文章

  • 使用 s:select 标签在下拉菜单中使用 i18n [重复]

    这个问题在这里已经有答案了 我的 JSP 页面中有一个下拉菜单 它是通过
  • 如何从球衣服务端点发送实体列表?

    我正在从球衣服务器发送实体列表 在客户端 我试图获取这些实体列表 但它给了元帅例外 为什么它在元素名末尾添加 s 即 emps 而不是 emp XmlRootElement public class Emp Server side code
  • Maven项目中的HDF5

    我正在尝试将 hdf hdf5lib H5 导入到 NetBeans 中的 Maven 项目中 它有这个作为导入行 import hdf hdf5lib H5 正如这里所建议的 https support hdfgroup org prod
  • 调试器不会停止在 Intellij IDEA 中的源代码处

    我有一个相当奇怪的问题 无法使用 Intellij IDEA 解决 我正在解析电子邮件文件org apache james mime4j包裹 但我的邮件文件格式不兼容Date 标头 因此 我从 mime4j 源创建了模块 并从磁盘中删除了
  • 如何知道内存中是否已经存在类的实例?

    如何知道内存中是否已经存在类的实例 我的问题是 如果存在类实例 则不想读取方法 这是我的代码 private void jButton java awt event ActionEvent evt PNLSpcMaster pnlSpc n
  • 如何在 Java 中复制对象?

    考虑下面的代码 DummyBean dum new DummyBean dum setDummy foo System out println dum getDummy prints foo DummyBean dumtwo dum Sys
  • Jboss EAP 7 - 如何从部署中排除隐式模块(javax.jms)?

    我没想到我会来到这里 但经过大量 Google 和 StackOverflow 搜索后 我来到了这里 这就是我的确切问题 https www linkedin com pulse tale two jars marco antonio al
  • TableModel setCellEditable 并自动将值设置回 false

    我目前正在尝试在 JTable 中实现 JPopupMenu 它允许解锁单元格以进行编辑 Override public void actionPerformed ActionEvent e if e getActionCommand Un
  • 带嵌入式 tomcat 的 spring-boot 不会将请求分派到控制器

    我有一个使用 spring boot 和嵌入式 Tomcat 容器的应用程序 据我所知 我的代码与 spring boot 相同示例项目 https github com spring projects spring boot tree m
  • C# Xml-使用 IXmlSerialized 序列化派生类

    我有一个与 XML 序列化兼容的基类和一个实现 IXmlSerialized 的派生类 在此示例中 基类确实实现了 IXmlSerializable using System Diagnostics using System Text us
  • 竞争条件和 Clojure Atoms

    clojure atom 的文档指出 Changes to atoms are always free of race conditions 然而 竞争条件不仅是根据更改定义的 而且是在不同线程中并行逻辑操作的上下文中定义的 我想知道 保证
  • 如何从 Java 生产代码中删除调试语句

    编译器是否可以从生产代码中删除用于调试目的 例如日志记录 的语句 调试语句需要以某种方式进行标记 可能使用注释 设置属性 debug true 并在每个调试语句中检查它很容易 但这会降低性能 如果编译器能够简单地使调试语句消失 那就太好了
  • 相对重力

    我最近开始使用jMonkey引擎 这非常好 但我在尝试实现相对重力时陷入了困境 我想让行星彼此围绕轨道运行 不一定是完美的圆形轨道 取决于速度 所以每个对象都应该影响其他对象 我现在拥有的 关闭全球重力 bulletAppState get
  • 如何在不冒 StackOverflowError 风险的情况下使用 CompletableFuture?

    我想遍历异步函数的搜索空间 我将逻辑编码如下 Assuming that a function maps a range of inputs to the same output value minimizes the input valu
  • java多线程中“私有最终对象”锁定有什么用?

    java多线程中 私有最终对象 锁定有什么用 据我的理解 我认为要使一个类成为线程安全的 我们应该使用内部锁定 将所有方法标记为同步并使用 this 将它们锁定在对象的监视器上 或者我们可以用方法中的私有最终对象锁替换类的 this 上标记
  • 致命异常:OkHttp 调度程序

    我在 Android 应用程序中使用 OkHttp 库向天气 API 发出 Web 请求 我已经实现了我的代码 但在执行请求时遇到了致命异常 我也已经在我的清单中添加了互联网权限 MainActivity java private Curr
  • 如何预先填充 JFileChooser 将“文件名”?

    我打算用数据库中的名称填充 JFileChooser 但使用标准 JFileChooser 对话框进行加载 删除 保存和另存为 我想给用户留下这样的印象 他们正在处理文件系统 而在后端使用数据库来保存更改 用户不应该能够浏览到不同的目录进行
  • CreateProcess error=206,运行 gwtCompile 时文件名或扩展名太长

    我的应用程序是一个 springboot gradle 应用程序 我的应用程序的一部分涉及使用 gradle 进行遗留 gwt 编译 它工作正常 但今天当我运行下面的 gradle 任务时 它显示 CreateProcess error 2
  • 找出对象列表中是否包含具有指定字段值的内容?

    我有一个从数据库收到的 DTO 列表 它们有一个 ID 我想确保我的列表包含具有指定 ID 的对象 显然 在这种情况下创建具有预期字段的对象不会有帮助 因为 contains 调用 Object equals 并且它们不会相等 我想出了这样
  • 优雅地避免 Java 中的 NullPointerException

    考虑这一行 if object getAttribute someAttr equals true 显然这一行是一个潜在的错误 属性可能是null我们会得到一个NullPointerException 因此我们需要将其重构为以下两个选择之一

随机推荐

  • 从简单 HTTP 服务器中的每个文件中删除 .html 扩展名

    我想做到这一点 以便当有人访问我的 Go HTTP 服务器上的页面时 他们不会看到 html扩大 例如 当他们访问时https example org test他们会看到的内容https example org test html My c
  • 创建/获取自定义 kubernetes 资源

    我想用 go 创建一个自定义的 kubernetes 资源 该应用程序部署在kubernetes集群中 我想创建例如以下资源 apiVersion configuration konghq com v1 kind KongPlugin me
  • CouchDB从XMLHttpRequest跨域访问?

    目前 Web 应用程序需要提供某种跨域 HTTP 标头来访问其他域上的数据 http openfontlibrary org wiki Web Font linking and Cross Origin Resource Sharing 有
  • Xcode 6.1 上架构 x86_64 的未定义符号

    突然 Xcode 在编译时抛出了这个错误 Undefined symbols for architecture x86 64 OBJC CLASS Format referenced from objc class ref in WOExe
  • 如何在 C 中将无符号字符数组转换为十六进制字符串

    是否可以将无符号字符数组表示为字符串 当我搜索它时 我发现只有 memset 能够做到这一点 但是逐个字符 假设这不是正确的方法 有没有办法进行转换 上下文 我试图存储加密哈希函数的输出 该函数恰好是一个无符号字符数组 eg unsigne
  • Eclipse 中如何自动删除尾随空格?

    这个问题有两个部分 其中之一我已经有了答案 如何自动删除尾随空格从正在编辑的整个文件 gt 答案 使用任意编辑插件 可以设置为在任何保存到文件时执行此操作 如何自动删除尾随空格仅从我改变的线条来看 gt 这我不知道 希望得到任何帮助 我假设
  • 汇编语言有多不可移植,/真的/?

    我知道用汇编语言编写任何内容或将汇编语言添加到任何程序都会损害其可移植性 但是 有多糟糕呢 我的意思是 现在基本上所有 PC 都是 x86 或 x64 对吧 那么 如果我将汇编嵌入到 C 程序中 为什么无论它去了哪里它仍然无法编译 这种不可
  • 致命错误:Dictionary 不符合 Decodable,因为 Any 不符合 Decodable

    我正在尝试使用 swift 4 解析本地 json 文件 success true lastId null hasMore false foundEndpoint https endpoint error null 这是我正在使用的功能 f
  • 如何使单个事件处理程序处理所有 Button.Click 事件?

    在我的程序中 我有 9 个按钮 每个按钮都有 9 个独立的事件处理程序 尽管每个事件处理程序中的代码是相同的 事实证明 更改所有这些代码是非常乏味的 是否可以创建一个 Button Click 事件处理程序来处理所有按钮的 Button C
  • LLVM、GCC 4.2 和 Apple LLVM 编译器 3.1 之间的区别

    LLVM GCC 4 2 和 Apple LLVM 编译器 3 1 之间的主要区别是什么 我对编译器相当陌生 因此非常感谢您的帮助 此外 我对这两个编译器如何影响游戏性能特别感兴趣 差异在于技术和速度 当 Apple 开始从 GCC 的编译
  • Android Studio 上未安装 Android SDK

    根据我的最后一个问题 我从此链接下载了 Android Studio 不含 SDK 2 2 3 0 https dl google com dl android studio install 2 2 3 0 android studio i
  • boost序列化异常:未注册类,序列化多态基问题

    我一直在阅读 交叉引用 但最终没有找到连贯的例子和答案 我想做的事情非常简单 但我显然错过了一些东西 用英语 我有一个带有两个抽象基的类结构 纯 BB 派生自纯 AA 我将其管理为 std vector
  • 为什么我的旋转 GIF 在 jQuery ajax 调用运行时停止?

    我刚刚开始摆脱 ASP NET UpdatePanels 我使用 jQuery 和 jTemplates 将 Web 服务的结果绑定到网格 一切正常 事情是这样的 我试图在刷新表时显示一个旋转器 GIF 类似于 ASP NET 中的 Upd
  • Qt4 中的析构函数

    我对在 Qt4 中使用析构函数感到非常困惑 希望你们能帮助我 当我有这样的方法时 Des 是一个类 void Widget create Des test new Des test gt show 我怎样才能确保这个小部件在关闭后会被删除
  • NSOperationQueue 如何等待两个异步操作?

    如何让 NSOperationQueue 或其他任何东西 等待两个带有回调的异步网络调用 流程需要看起来像这样 Block Begins Network call with call back block begins first netw
  • pygtk 窗口,带有忽略所有 X(鼠标)事件的框(让它们通过)

    我想执行以下操作 创建一个全屏 始终位于顶部的 pygtk 窗口 其中包含显示一些 html 的 webkit 小部件 但带有一个完全透明的框 以便下面的窗口可见 这似乎是可能的 是否可以使用 WebKit 在清晰的背景上渲染网页内容 我想
  • 如何在 CLI 上运行 Maven 生成的 jar

    我正在尝试让 Maven 管理的项目在命令行上运行 我在 pom xml 中有一组依赖项 随后将其下载并安装在 m2 repository 中 我已在 pom 中包含必要的配置 以将类路径添加到 jar 清单中 现在的问题是我尝试运行该 j
  • 在Python中,如何从两个列表中找到常用单词,同时保留单词顺序?

    我正在尝试找到一种简单的方法来做到这一点 list1 little blue widget list2 there is a little blue cup on the table 我想获取两个列表的共同元素 list1 的顺序不变 所以
  • jQuery 在选择器中排除具有特定类的元素

    我想在 jQuery 中为某些锚标记设置点击事件触发器 我想在新选项卡中打开某些链接 同时忽略具有特定类别的链接 在您询问之前 我无法将类别放在我试图捕获的链接上 因为它们来自 CMS 我想排除与类的链接 button OR generic
  • 如何使用 XOM 传输 XML 数据?

    假设我想将大量搜索结果以 XML 的形式输出到 PrintWriter 或 OutputStream 中 使用XOM 生成的 XML 将如下所示