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文件的原理的话更好。

解决方案 »

  1.   

    跑出来的结果格式怎么来的?怎样整理成好看点的格式?如果知道SAX解析XML文件的原理的话更好。?解析出来的都是字符串想要好看点的 你可以自己拼接字符串啊
      

  2.   

    程序结果是这样的:
    车牌号码:A1234
    车牌号码:
       
    地址:四川省XX县XX镇XX路X段XX号
    地址: 地址: 车牌号码:B1234
    车牌号码: 
       
    地址:四川省XX市XX乡XX村XX组
    地址: 地址: 运行时间:160毫秒
      

  3.   

    显然lz对sax解析机制不是很了解,我帮你改了下,可以自己分析下:)package jp.vortechs.SystemTradeASP.tms.common;import org.xml.sax.*;
    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();
    }
    }
      

  4.   

    用dom4j吧http://www.streamcave.com/article/java/201004/java_dom4j_xml.html
      

  5.   

    public void characters(char ch[], int start, int length)
    throws SAXException这个方法会在同一段文本中调用多次的,所以你不应该在这个方法中打印内容,应该在endElement中判断
    正确的做法是增加一个成员StringBuilder,在startElemenet的时候清空它(setLength(0)),
    然后在characters方法中append到StringBuilder中,在endElement时才进行打印。
      

  6.   

    [Quote=引用 8 楼 stl0 的回复:]
    显然lz对sax解析机制不是很了解,我帮你改了下,可以自己分析下:)/******************/
    谢谢八楼的大虾,我知道问题出在哪了,就是没POP(),哎,项目中有这个东东,不懂。谢谢了~~