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

时间:2010-10-03 15:16:36

标签: java xml parsing sax wikipedia

我正在尝试使用java的SAXParser将大型XML文件拆分为较小的文件(特别是未压缩的大约28GB的维基百科转储)。

我有一个Pagehandler类,扩展了DefaultHandler

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的参数传递的内容重建这些 - 这看起来有点痛苦。或者有更简单的方法吗?

我想做的就是遍历文件并将其写出来,每隔一段时间滚动输出文件。这有多难:)

由于

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

这里的问题是你自己编写XML元素。看看XMLWriter classdom4j - 虽然它有点旧,但通过调用startElementendElement方法可以很容易地输出XML文档。