使用SAX解析xml文档

1.首先,在main方法中解析xml文档,具体代码如下:

import org.w3c.dom.*;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

public class Main {

    public static void main(String[] args)  throws Exception {
        //创建一个文档解析器工厂
        SAXParserFactory factory=SAXParserFactory.newInstance();
        SAXParser parser=factory.newSAXParser();

        Handler handler=new Handler();
        parser.parse("src/server.xml",handler);
    }
}

其中,解析时parser.parse("src/server.xml",handler);第一个参数是xml文档的地址,第二个参数是具体的以什么规则解析这个xml文档。

2.重写Handler类,以自由操纵如何具体的解析xml文档的具体值

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class Handler extends DefaultHandler {

    //全局变量用于存储书籍的编号
    int bookIndex=0;
    /*开始解析文档*/
    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
        System.out.println("开始解析文档");
    }
    /*结束解析文档*/
    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
        System.out.println("结束解析文档");
    }
    /*解析文档中所有的开始标签*/
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        //开始解析book元素的属性
        if("book".equals(qName)){
            bookIndex++;
            System.out.println("==========开始解析第"+bookIndex+"本书============");
            //输出book元素的id属性,已知属性名,根据属性名获取属性值
            //System.out.println("book的属性值是"+attributes.getValue("id"));

            //不知道属性名,只能遍历所有属性
            int num=attributes.getLength();
            for(int i=0;i<num;i++){
                System.out.print("第"+(i+1)+"个属性名是"+attributes.getQName(i));
                System.out.println(" 第"+(i+1)+"个属性值是"+attributes.getValue(i));
            }
        }
        if(!qName.equals("book")&&!qName.equals("")){
            System.out.println(qName);
        }

    }
    /*解析文档中所有的结束标签*/
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        if("book".equals(qName)) {
            System.out.println("============结束解析第" + bookIndex + "本书==========");
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        String s=new String(ch,start,length);
        s=s.trim();
        if(!s.equals("")){
            System.out.println(s);
        }

    }
}
原文地址:https://www.cnblogs.com/xiaoao/p/9630263.html