XML解析:SAX解析

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>[email protected]</email>
        <address>130号</address>
    </contact>
    <contact id="002" hobby="drink">
        <name>李四</name>
        <gender>女</gender>
        <age>23</age>
        <phone>13721102938</phone>
        <email>[email protected]</email>
        <address>131号</address>
    </contact>
</contact-list> 
发布了48 篇原创文章 · 获赞 7 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_36599216/article/details/53455105