我正在尝试解析一个xml文档,搜索后我发现sax是最好的选择,但文档非常大(1.5 GB)等待7分钟,但它仍在运行 我的问题是,这是正常的吗?或者我可以做得更好?
public static void main(String argv[]) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
int c = 0;
boolean id = false;
boolean value = false;
boolean orgin = false;
boolean note = false;
@Override
public void startElement(String uri, String localName, String eName,
Attributes attributes) throws SAXException {
if (eName.equalsIgnoreCase("ID")) {
id = true;
}
if (eName.equalsIgnoreCase("VALUE")) {
value = true;
}
if (eName.equalsIgnoreCase("ORGIN")) {
orgin = true;
}
if (eName.equalsIgnoreCase("NOTE")) {
note = true;
}
}
@Override
public void endElement(String uri, String localName,
String eName) throws SAXException {
}
@Override
public void characters(char ch[], int start, int length) throws SAXException {
if (id) {
System.out.println(new String(ch, start, length));
id = false;
System.out.println("record num : "+c++);
}
if (value) {
System.out.println(new String(ch, start, length));
value = false;
}
if (orgin) {
System.out.println(new String(ch, start, length));
orgin = false;
}
if (note) {
System.out.println(new String(ch, start, length));
note = false;
}
}
};
saxParser.parse("./transactions.xml", handler);
} catch (Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:2)
xyz
更改为equalsIgnoreCase
来节省一些时间(除非您真的遇到" ValuE"和" valUE"以及" VaLuE&# 34; ...)答案 1 :(得分:1)
如果你解析这么大的文件,你应该使用Stax而不是Sax。使用Stax,您可以跳过部分文件,使文件更快,速度更快。
StAX是一个"拉" API的类型。如上所述,有Cursor和Event Iterator API。 API有读写两面。它比SAX更适合开发人员。与SAX一样,StAX不需要将整个文档保存在内存中。但是,与SAX不同,不需要读取整个文档。部分可以跳过。这可能导致性能甚至比SAX提高。