zoukankan      html  css  js  c++  java
  • SAX解析xml

    SaxParseTest.java

    package cn.pinnsvin;
    
    import java.io.IOException;
    import java.util.ArrayList;
    
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    import org.junit.Test;
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.XMLReader;
    import org.xml.sax.helpers.DefaultHandler;
    
    import cn.pinnsvin.bean.Book;
    
    
    //sax解析xml
    public class SaxParseTest {
        
        @Test
        public void saxParse() throws ParserConfigurationException, SAXException, IOException{
            
            //获取工厂
            SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
            SAXParser saxParser = saxParserFactory.newSAXParser();
            
            //获取xmlReader,通过这个reader可以处理ContentHandler
            XMLReader reader = saxParser.getXMLReader();
            //给XMLReader设置contentHandler,ContentHandler是一个接口,里面有太多方法没有实现
            //不去实现ContentHandler,而是继承它默认的实现DefaultHandler
            reader.setContentHandler(new MyHandler());
            //解析xml文档
            reader.parse("book.xml");
            
        }
        private class MyHandler extends DefaultHandler{
    
            @Override
            public void characters(char[] ch, int start, int length)
                    throws SAXException {
                System.out.println("文档内容:"+(new String(ch,start,length)));
            }
    
            @Override
            public void endDocument() throws SAXException {
                System.out.println("文档结束");
            }
    
            @Override
            public void endElement(String uri, String localName, String qName)
                    throws SAXException {
                System.out.println("结束标签:</"+qName+">");
            }
    
            @Override
            public void startDocument() throws SAXException {
                System.out.println("文档开始");
            }
    
            @Override
            public void startElement(String uri, String localName, String qName,
                    Attributes attributes) throws SAXException {
                System.out.println("标签开始<"+qName+">");
            }
            
        }
        
        @Test
        public void saxParse2() throws ParserConfigurationException, SAXException, IOException{
            SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
            SAXParser saxParser = saxParserFactory.newSAXParser();
            XMLReader xmlReader = saxParser.getXMLReader();
            xmlReader.setContentHandler(new DefaultHandler(){
    
                private boolean isPrice=false;
                private int count=0;
    
                @Override
                public void characters(char[] ch, int start, int length)
                        throws SAXException {
                    if(isPrice&&count==2){
                        System.out.println(new String(ch,start,length));
                    }
                }
    
                @Override
                public void endElement(String uri, String localName, String qName)
                        throws SAXException {
                    if("价格".equals(qName)){
                        isPrice=false;
                    }
                }
    
                @Override
                public void startElement(String uri, String localName,
                        String qName, Attributes attributes) throws SAXException {
                    if("价格".equals(qName)){
                        isPrice = true;
                        count++;
                    }
                }
                
            });
            xmlReader.parse("book.xml");
        }
    
    //解析xml文档,并将其转换成ArrayList
        @Test
        public void saxParseToList() throws ParserConfigurationException, SAXException, IOException{
            
            SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
            SAXParser saxParser = saxParserFactory.newSAXParser();
            XMLReader xmlReader = saxParser.getXMLReader();
            xmlReader.setContentHandler(new DefaultHandler(){
                
                private ArrayList<Book> bookSheif = null;
                private Book book;
                String tag = null;
                @Override
                public void characters(char[] ch, int start, int length)
                        throws SAXException {
                    if("书名".equals(tag)){
                        book.setTitle(new String(ch,start,length));
                    }else if("作者".equals(tag)){
                        book.setAuthor(new String(ch,start,length));
                    }else if("价格".equals(tag)){
                        book.setPrice(new String(ch,start,length));
                    }
                }
    
                @Override
                public void endElement(String uri, String localName, String qName)
                        throws SAXException {
                    tag = null;
                    if("书架".equals(qName)){
                        for (Book book1 : bookSheif) {
                            System.out.println(book1);
                        }
                    }else if("书".equals(qName)){
                        bookSheif.add(book);
                    }
                }
    
                @Override
                public void startElement(String uri, String localName,
                        String qName, Attributes attributes) throws SAXException {
                    if("书架".equals(qName)){
                        //创建ArrayList
                        bookSheif = new ArrayList<Book>();
                    }else if("书".equals(qName)){
                        //创建对象
                        book = new Book();
                    }else if("书名".equals(qName)){
                        tag = "书名";
                    }else if("作者".equals(qName)){
                        tag = "作者";
                    }else if("价格".equals(qName)){
                        tag = "价格";
                    }
                }
                
            });
            xmlReader.parse("book.xml");
        }
    }

    book.java

    package cn.pinnsvin.bean;
    
    public class Book {
        private String title;
        private String author;
        private String price;
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        public String getAuthor() {
            return author;
        }
        public void setAuthor(String author) {
            this.author = author;
        }
        public String getPrice() {
            return price;
        }
        public void setPrice(String price) {
            this.price = price;
        }
        @Override
        public String toString() {
            return "Book [title=" + title + ", author=" + author + ", price="
                    + price + "]";
        }
        
    }

    book.xml

    <?xml version="1.0" encoding="UTF-8" standalone="no"?><书架>
        <>
            <书名>java深入浅出</书名>
            <作者>你猜 </作者>
            <价格>20.50</价格>
        </>
        <>
            <书名>c深入浅出</书名>
            <作者>haha </作者>
            <价格>99.00</价格>
        </>
    </书架>
  • 相关阅读:
    优达,计算机科学导论
    关于未来发展阶段小结
    CS50.5
    CS50.4
    简单查看tomcat中部署java服务的内存使用情况
    python3环境搭建(CentOS7.2)
    mysql主从配置脚本
    安装rkhunter
    转移到博客园啦!
    Eclipse上Maven环境配置使用 (全)
  • 原文地址:https://www.cnblogs.com/pinnsvin/p/6837664.html
Copyright © 2011-2022 走看看