2

我正在尝试使用 java 将一个大的 XML 文件拆分为较小的文件SAXParser(特别是未压缩的 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- 这似乎有点痛苦。或者有没有更简单的方法?

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

谢谢

4

2 回答 2

1

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

于 2010-10-03T15:30:05.260 回答
0

这里的问题是您自己编写 XML 元素。看看dom4jXMLWriter——虽然它有点老了,但通过调用它的和方法可以很容易地输出 XML 文档。startElementendElement

于 2010-10-03T15:33:29.663 回答