【发布时间】:2015-09-01 12:37:23
【问题描述】:
我正在尝试解析一个 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();
}
}
【问题讨论】:
-
1.5 是什么意思? 1.5 mb?
-
@NathanHughes 我第一次使用这个,有什么建议吗?
-
我的建议:停止从 mkyong 获取错误代码,阅读 Oracle 文档,并遵循 sharonbn 的建议。
-
@NathanHughes 你能告诉我为什么这么糟糕吗?