【问题标题】:xml parsers does not read such a large file contentsxml 解析器不会读取这么大的文件内容
【发布时间】:2012-03-01 06:47:08
【问题描述】:
<?xml version="1.0"?>

<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<database name="test">
    <table_data name="test">
    <row>
        <field name="field1">406</field>
        <field name="field2">a2</field>
        <field name="field3">16</field>
        <field name="field4"></field>
        <field name="field5" xsi:type="xs:hexBinary">
[get the content from http://122.183.130.242/file/hex.txt path because i cannot give such a large content to stackoverflow]

        </field>
        <field name="field6">16</field>
    </row>
    </table_data>
</database>
</mysqldump>

我正在尝试从上述 xml 文件中解析和读取内容。

我正在使用 DOM 解析器,我还尝试了 StAX 解析器来解析 XML,但我无法解析这么大的文件。

如何解析大型 XML 文件?

【问题讨论】:

  • DOM 对于这么大的文件不是一个好的选择。如果 SAX 也失败了唯一的选项,我认为会增加内存。
  • 是的,这就是我问朋友的原因。对于这个来说,更好的方法是什么。
  • 尝试解析时遇到什么错误?
  • 我没有收到任何错误。但会跳过文件解析。
  • “文件解析被跳过”表示解析器不是问题,代码中的其他问题是。如果确实是文件太大的问题,您会收到 OutOfMemoryError。要获得更好的答案,请发布您的代码。

标签: java mysql xml parsing dom


【解决方案1】:

使用 SAX 解析器方法.parse(InputStream stream, HandlerBase handler)

对于处理程序,您使用DefaultHandler

对于“流”参数,请执行以下操作:

BufferedReader stream=new BufferedReader( new FileReader(String filename));

...“文件名”在哪里,你猜对了,你的文件名。 现在我希望你知道如何使用 DefaultHandler。基本上你会覆盖你感兴趣的方法。 尝试调整 BufferedReader 的缓冲区大小,我认为您会对结果感到满意。

【讨论】:

  • 我有一个问题,这个 SAX 解析器是否允许更改和更新 xml 内容?
猜你喜欢
  • 2023-03-19
  • 2018-05-14
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 2015-12-29
  • 2011-12-25
相关资源
最近更新 更多