java - XMLStreamReader 问题

标签 java xml filestream

我正在使用 javax.xml 中的 XMLStreamReader 接口(interface)来解析 XML 文件。该文件包含巨大的数据量和几个 KB 的单个文本节点。

验证和读取通常效果很好,但我在处理大于 15k 个字符的文本节点时遇到了问题。问题出现在这个函数中

String foo = "";
if (xsr.getEventType() == XMLStreamConstants.CHARACTERS) {
    foo = xsr.getText();
    xsr.next(); // read next tag
}
return foo;

xsr 是流阅读器。在此特定情况下,文本节点中的文本长度为 53'337 个字符(但有所不同),但是 xsr.getText() 方法仅返回其中的前 15'537 个字符。当然,我可以遍历该函数并连接字符串,但不知何故,我认为这不是我的想法...

我没有在文档或其他任何地方找到任何关于此的内容。这是有意的行为还是有人可以确认/否认它?我是否以某种方式错误地使用了它?

谢谢

最佳答案

Of course I could loop over the function and concatenate the strings, but somehow I don't think that's the idea...

实际上,就是的想法:)

解析器可以随意分解事件流,只要它与原始文档一致即可。这意味着它可以并且经常会将您的文本数据分解为多个事件。它如何以及何时选择这样做是解析器内部的实现细节,并且基本上是不可预测的。

是的,如果您收到多个连续的 CHARACTERS 事件,您需要手动附加它们。这是您为低级 API 支付的价格。

关于java - XMLStreamReader 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4184572/

相关文章:

java - Java中如何保存对象?构造函数中的反序列化

java - 将外部 .exe 嵌入到 Maven 项目中的 .jar 文件中

asp.net - 返回 XML 作为 HTTP 响应

java - 将 ActionListener 添加到按钮数组

java - 使用 Android 进行音译

c - libxml2:在 xpath 中忽略命名空间

c# - 如何强制 WPF ListView 重新查询它的 ItemSsource?

c# - Stream.Read 正在组合两个不同的读取

SQL Server FILESTREAM 限制

c# - 如何使用 StreamWriter 在单词之间留出空格