• 技术文章 >后端开发 >XML/RSS教程

    XML文件使用SAX方法读取的示例代码

    黄舟黄舟2017-03-31 14:22:08原创760
    XML文件

    <?xml version="1.0" encoding="UTF-8"?>	
    
    	<bookstore>
    		<book id="1">
    			<name>冰与火之歌</name>
    			<author>乔治马丁</author>
    			<year>2014</year>
    			<price>89</price>
    		</book>
    		<book id="2">
    			<name>安徒生童话</name>
    			<year>2004</year>
    			<price>77</price>		
    			<language>English</language>
    		</book>
    	</bookstore>

    handler.java类

    package xmltes;
    
    import javax.xml.stream.events.Characters;
    import javax.xml.stream.events.StartElement;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    
    public class handler extends DefaultHandler{
        private static int bookNum = 0;
        //遍历xml文件的开始标签
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            // 调用DefaultHandler父类的startElement方法
            super.startElement(uri, localName, qName, attributes);
            
            //判断是不是有属性的标签/如book
            if(qName.equals("book")){
                bookNum++;
                System.out.println("====================开始遍历第"+bookNum+"书的内容================");
                //开始解析book元素
                //已知book元素下属性的名称,可以根据名称判断
               /* String value = attributes.getValue("id");
                System.out.println("book的属性值是" + value);*/
                //如果不知道数的属性名称
                int num = attributes.getLength();
                
                for(int i=0;i<num;i++){
                    System.out.println("书的第" + (i+1) + "个属性名是:"+attributes.getQName(i)+"===属性值是:" + attributes.getValue(i));
                }
                
            }else if(!qName.equals("book") && !qName.equals("bookstore") ){
                System.out.println("节点名是:" + qName);
            }
            
            
            
            
        }
        //遍历xml文件的结束标签
        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            // TODO Auto-generated method stub
            super.endElement(uri, localName, qName);
            //判断这本书是否遍历结束
            if(qName.equals("book")){
                System.out.println("====================结束遍历第"+bookNum+"书的内容================");
            }
        }
        
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            // TODO Auto-generated method stub
            super.characters(ch, start, length);
            String value = new String(ch, start, length);
            if(!value.trim().equals("")){
                System.out.println(value);
            }
        }
        
        //用来标识解析开始
        @Override
        public void startDocument() throws SAXException {
            // TODO Auto-generated method stub
            super.startDocument();
    //        System.out.println("进入标识解析开始方法");
        }
        
        //用来标识解析结束
        @Override
        public void endDocument() throws SAXException {
            // TODO Auto-generated method stub
            super.endDocument();
    //        System.out.println("进入标识解析结束方法");
        }
        
    }

    Test类

    package xmltes;
    
    import java.io.IOException;
    
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    import org.xml.sax.SAXException;
    
    
    public class SAXTest {
        public static void main(String[] args) {
            try {
                //获取一个SAXParserFactory的实例
                SAXParserFactory factory = SAXParserFactory.newInstance();
                //通过factory获取SAXParser实例
                SAXParser parser = factory.newSAXParser();
                //创建一个SAXParserHandler对象
                handler handler = new handler();
                parser.parse("001.xml", handler);
            } catch (ParserConfigurationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SAXException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    以上就是XML文件使用SAX方法读取的示例代码的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:XML,SAX
    上一篇:详细介绍XML原理代码实例 下一篇:XML文件使用DOM方法读取的示例代码
    千万级数据并发解决方案

    相关文章推荐

    • 使用JavaScript访问XML数据• 小心XmlPullParser.netText()方法• 详细介绍XML原理代码实例• XML数据查询技术已经成为现今的研究热点• .net读写xml文档详解
    1/1

    PHP中文网