zoukankan      html  css  js  c++  java
  • 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>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> 
    
    很多事情即将开始,很多人的命运即将改变
  • 相关阅读:
    导入和导出任务列表
    如何读取嵌入的资源
    如何更改水晶报表导出文件的名称
    linux下的精确wait
    cppunit helloworld详尽篇
    谈谈技术原则,技术学习方法,代码阅读及其它
    [Case] “凭心而论,在这家公司很敬业的工作了3年多,老板最后给我下的评语,大家都看看吧,千万别和我走同一条路!”(摘自csdn)
    谈谈技术原则,技术学习方法,代码阅读及其它(正文)
    网络数据库挖掘程序的设计
    [转载]Linux中文件查找技术大全
  • 原文地址:https://www.cnblogs.com/liuzk/p/12458952.html
Copyright © 2011-2022 走看看