test.xml文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<RESULT>
<VALUE>
<NO>A1234</NO>
<ADDR>四川省XX县XX镇XX路X段XX号</ADDR>
</VALUE>
<VALUE>
<NO>B1234</NO>
<ADDR>四川省XX市XX乡XX村XX组</ADDR>
</VALUE>
</RESULT>MyXMLReader.java文件内容:
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;public class MyXMLReader extends DefaultHandler { java.util.Stack tags = new java.util.Stack(); public MyXMLReader() {
super();
} public static void main(String args[]) {
long lasting = System.currentTimeMillis();
try {
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
MyXMLReader reader = new MyXMLReader();
sp.parse(new InputSource("data_10k.xml"), reader);
} catch (Exception e) {
e.printStackTrace();
} System.out.println("运行时间:" + (System.currentTimeMillis() - lasting)
+ "毫秒");
} public void characters(char ch[], int start, int length)
throws SAXException {
String tag = (String) tags.peek();
if (tag.equals("NO")) {
System.out.println("车牌号码:" + new String(ch, start, length));
}
if (tag.equals("ADDR")) {
System.out.println("地址:" + new String(ch, start, length));
}
} public void startElement(String uri, String localName, String qName,
Attributes attrs) {
tags.push(qName);
}
}
跑出来的结果格式怎么来的?怎样整理成好看点的格式?如果知道SAX解析XML文件的原理的话更好。
<?xml version="1.0" encoding="UTF-8"?>
<RESULT>
<VALUE>
<NO>A1234</NO>
<ADDR>四川省XX县XX镇XX路X段XX号</ADDR>
</VALUE>
<VALUE>
<NO>B1234</NO>
<ADDR>四川省XX市XX乡XX村XX组</ADDR>
</VALUE>
</RESULT>MyXMLReader.java文件内容:
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;public class MyXMLReader extends DefaultHandler { java.util.Stack tags = new java.util.Stack(); public MyXMLReader() {
super();
} public static void main(String args[]) {
long lasting = System.currentTimeMillis();
try {
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
MyXMLReader reader = new MyXMLReader();
sp.parse(new InputSource("data_10k.xml"), reader);
} catch (Exception e) {
e.printStackTrace();
} System.out.println("运行时间:" + (System.currentTimeMillis() - lasting)
+ "毫秒");
} public void characters(char ch[], int start, int length)
throws SAXException {
String tag = (String) tags.peek();
if (tag.equals("NO")) {
System.out.println("车牌号码:" + new String(ch, start, length));
}
if (tag.equals("ADDR")) {
System.out.println("地址:" + new String(ch, start, length));
}
} public void startElement(String uri, String localName, String qName,
Attributes attrs) {
tags.push(qName);
}
}
跑出来的结果格式怎么来的?怎样整理成好看点的格式?如果知道SAX解析XML文件的原理的话更好。
车牌号码:A1234
车牌号码:
地址:四川省XX县XX镇XX路X段XX号
地址: 地址: 车牌号码:B1234
车牌号码:
地址:四川省XX市XX乡XX村XX组
地址: 地址: 运行时间:160毫秒
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;public class test extends DefaultHandler { java.util.Stack tags = new java.util.Stack(); public test() {
super();
} public static void main(String args[]) {
long lasting = System.currentTimeMillis();
try {
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
test reader = new test();
sp.parse(new InputSource("test.xml"), reader); } catch (Exception e) {
e.printStackTrace();
} System.out.println("time:" + (System.currentTimeMillis() - lasting) + "minsec");
} public void characters(char ch[], int start, int length) throws SAXException {
String tag = (String) tags.peek();
if (tag.equals("NO")) {
System.out.println("haoma:" + new String(ch, start, length)); }
if (tag.equals("ADDR")) {
System.out.println("address:" + new String(ch, start, length));
}
} public void endElement(String uri, String localName, String qName) throws SAXException {
tags.pop();
} public void startElement(String uri, String localName, String qName, Attributes attrs) throws SAXException {
tags.push(qName);
} public void startDocument(){
tags = new java.util.Stack();
}
}
throws SAXException这个方法会在同一段文本中调用多次的,所以你不应该在这个方法中打印内容,应该在endElement中判断
正确的做法是增加一个成员StringBuilder,在startElemenet的时候清空它(setLength(0)),
然后在characters方法中append到StringBuilder中,在endElement时才进行打印。
显然lz对sax解析机制不是很了解,我帮你改了下,可以自己分析下:)/******************/
谢谢八楼的大虾,我知道问题出在哪了,就是没POP(),哎,项目中有这个东东,不懂。谢谢了~~