繁体   English   中英

Java:使用SAXParser拆分大型XML文件

[英]Java: splitting up a large XML file with SAXParser

我正在尝试使用Java的SAXParser (特别是Wikipedia转储,未压缩的大小约为28GB)将较大的XML文件拆分为较小的文件。

我有一个扩展DefaultHandlerPagehandler类:

private class PageHandler extends DefaultHandler {

   private StringBuffer text;
   ...

  @Override
  public void startElement(String uri, String localName, String qName, Attributes attributes) {

        text.append("<" + qName + ">");
  }

  @Override
  public void endElement(String uri, String localName, String qName) {

        text.append("</" + qName + ">");

        if (qName.equals("page")) {
            text.append("\n");
            pageCount++;
            writePage();
        }

        if (pageCount >= maxPages) {
            rollFile();
        }
    }

  @Override
  public void characters(char[] chars, int start, int length) {
        for (int i = start; i < start + length; i++) {
            text.append(chars[i]);
        }
    }
}

这样我就可以写出元素内容没问题了。 我的问题是如何获取元素标签和属性-这些字符似乎没有报告。 充其量,我将不得不从作为startElement参数传递的内容中重建这些内容-似乎有些痛苦。 还是有更简单的方法?

我要做的就是遍历文件并将其写出,经常滚动输出文件。 这有多难:)

谢谢

我不太确定我是否完全理解您要做什么,但是要获取限定名称作为字符串,您只需执行qName.toString()并获取属性名称即可,您只需执行atts.getQName(int index)

这里的问题是您要自己编写XML元素。 看一下dom4jXMLWriter -尽管它XMLWriter ,但通过调用它的startElementendElement方法,它真的很容易输出XML文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM