zoukankan      html  css  js  c++  java
  • XML解析之sax解析案例(一)读取contact.xml文件,完整输出文档内容

    一、新建Demo2类:

    import java.io.File;
    
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    /**
     * 读取contact.xml文件,完整输出文档内容
     * @author APPle
     *
     */
    public class Demo2 {
    
    	public static void main(String[] args)throws Exception {
    		//1.创建SAXParser
    		SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
    		//2.读取xml文件
    		MyDefaultHandler2 handler = new MyDefaultHandler2();
    		parser.parse(new File("./src/contact.xml"), handler);
    		String content = handler.getContent();
    		System.out.println(content);
    	}
    
    }
    

    二、建立自定义MyDefaulthander2

    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    /**
     * SAX处理器程序
     * @author APPle
     */
    public class MyDefaultHandler2 extends DefaultHandler {
    	//存储xml文档信息
    	private StringBuffer sb = new StringBuffer();
    	
    	//获取xml信息
    	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++){//int getLength() 返回此列表中的属性个数。 
    				//得到属性名称   id="001"
    				String attrName = attributes.getQName(i);//String getQName(int index) 通过索引查找属性的 XML 限定(前缀)名。 
    				//得到属性值
    				String attrValue = attributes.getValue(i);//String getValue(int index) 通过索引查找属性的值。 
    				sb.append(" "+attrName+"=""+attrValue+""");
    			}
    		}
    		sb.append(">");
    	}
    	
    	/**
    	 * 文本内容
    	 */
    	@Override
    	public void characters(char[] ch, int start, int length)
    			throws SAXException {
    		//得到当前读取的文本
    		String content = new String(ch,start,length);
    		sb.append(content);
    	}
    	
    	/**
    	 * 结束标签
    	 */
    	@Override
    	public void endElement(String uri, String localName, String qName)
    			throws SAXException {
    		sb.append("</"+qName+">");
    	}
    }
    
    打印输出结果:

    <contactList>
        <contact id="001" name="eric">
            <name>张三</name>
            <age>20</age>
            <phone>134222223333</phone>
            <email>zhangsan@qq.com</email>
            <qq>432221111</qq>
        </contact>
        <contact id="002" name="jacky">
            <name>eric</name>
            <age>20</age>
            <phone>134222225555</phone>
            <email>lisi@qq.com</email>
            <qq>432222222</qq>
        </contact>
    </contactList>

  • 相关阅读:
    mssqlserver字符串日期互相转换
    使用TripleDES算法加密/解密
    记录google,yahoo,bing爬虫记录的插件
    C#中编写sqlserver中自定义函数,实现复杂报表
    最基本的Socket编程 C#版
    基于.net平台的web框架搭建
    未来五年程序员需要掌握的10项技能
    一段输入框控制代码,包含所有控制条件!
    C#多线程编程实例编程
    C# WinForm开发系列 Socket/WCF/Rometing/Web Services
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299718.html
Copyright © 2011-2022 走看看