代码之家  ›  专栏  ›  技术社区  ›  Richard H

Java:用SAXParser分割大型XML文件

  •  2
  • Richard H  · 技术社区  · 14 年前

    我试图用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 -好像有点疼。还是有更简单的方法?

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

    谢谢

    2 回复  |  直到 14 年前
        1
  •  1
  •   Octavian Helm    14 年前

    我不太确定我完全理解你想做什么,但要得到合格的名称作为字符串,你只需做 qName.toString() 要得到属性名,只需 atts.getQName(int index) .

        2
  •  0
  •   Richard Fearn    14 年前

    这里的问题是,您正在自己编写XML元素。看看 XMLWriter class 属于 dom4j -虽然它有点旧,但通过调用它的 startElement endElement 方法。

    推荐文章
    Praxder  ·  SAX XMLParser不工作
    12 年前