XML解析:SAX解析

来源:互联网 发布:jdk 安装 linux 编辑:程序博客网 时间:2024/05/01 22:05
package hf.firstclass.a_SAX;import java.io.File;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;/** * 将XML标签信息原样打印到控制台 * @author LZK * */ //SAX解析主出程序public class TestSAX {    public static void main(String[] args) throws Exception {        //1.得到解析器工厂        SAXParserFactory factory=SAXParserFactory.newInstance();        //2.得到解析器        SAXParser parser=factory.newSAXParser();        //3.解析XML文件        //建立一个处理器        MyDefaultHandler2 handler = new MyDefaultHandler2();        //解析文件        parser.parse(new File("./src/contact.xml"), handler);        String content=handler.getContent();        //在控制台上打印出内容        System.out.println(content);    }}package hf.firstclass.a_SAX;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;//SAX处理器程序public class MyDefaultHandler2 extends DefaultHandler{    //建立一个容器,用于存储数据    private StringBuilder sb=new StringBuilder();    //提供一个方法,将容器内容返回出去    public String getContent(){        return sb.toString();    }    @Override    public void startElement(String uri, String localName,             String qName, Attributes attributes) throws SAXException {        sb.append("<"+qName);        //判断标签是否有属性,有的话就往容器里添加        if(attributes !=null){            for(int i=0;i<attributes.getLength();i++){                //根据角标获取名                String attrName=attributes.getQName(i);                //根据角标获取值                String attrValue=attributes.getValue(i);                sb.append(" "+attrName+"=\""+attrValue+"\"");            }        }        //实现的效果就像这样 <contact id="001" hobby="eat">        sb.append(">");    }    @Override    public void endElement(String uri, String localName,             String qName) throws SAXException {        //添加结束标签        sb.append("</"+qName+">");    }    @Override    public void characters(char[] ch, int start, int            length) throws SAXException {        //添加文本内容        String content=new String(ch,start,length);        sb.append(content);    }}源XML文件<?xml version="1.0" encoding="utf-8"?><contact-list >    <contact id="001" hobby="eat">        <name>张三</name>        <gender>男</gender>        <age>22</age>        <phone>17728394033</phone>        <email>1014420122@qq.com</email>        <address>130号</address>    </contact>    <contact id="002" hobby="drink">        <name>李四</name>        <gender>女</gender>        <age>23</age>        <phone>13721102938</phone>        <email>2971821987@qq.com</email>        <address>131号</address>    </contact></contact-list> 
0 0