XML三种解析

这是一个xml文件

在这里插入图片描述

使用Dom解析xml文件

 public void dom(){
        DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();//获得解析工厂
        try {
            DocumentBuilder builder=documentBuilderFactory.newDocumentBuilder();//创建builder对象
            InputStream inputStream = getAssets().open("book.xml");//获得XML文件
            bookBeans=new ArrayList<>();
            Document document=builder.parse(inputStream);//把整个文件添加到内存中(为什么需要把文件读到内存?因为内存比读SD卡快)

            NodeList nodeList=document.getElementsByTagName("book");//获取文件中所有节点名为book的内容,并打算将这些内容存入到list集合中

            //由于有好多个book节点,所以我们要对lis做遍历
            for(int i=0;i<nodeList.getLength();i++){
                //这样就拿到了其中一个book节点的内容,也就是一个对象的内容,包含5个属性
                BookBean bookBean=new BookBean();//这就是那个对象
                Node item = nodeList.item(i);//当i等于0的时候,获得的是第一个book对象,在文件中一共有2个book对象
                //对象的节点找到了就是item,直接从node中获得属性
                //接下来要来获得属性
                String id=item.getAttributes().getNamedItem("id").getNodeValue();
                bookBean.setId(Integer.parseInt(id));
                NodeList childNodes = item.getChildNodes();
                int length = childNodes.getLength();//这个是获得所有子节点的数量
                for(int j=0;j<length;j++){
                    //获得处理啊的所有节点note,可以一个一个单独获得,也可以获得所有的,然后遍历
                    Node item1 = childNodes.item(j);
                    switch (item1.getNodeName()){
                        case "name":
                            bookBean.setName(item1.getTextContent());
                            break;
                        case "author":
                            bookBean.setAuthor(item1.getTextContent());
                            break;
                        case "year":
                            bookBean.setYear(Integer.parseInt(item1.getTextContent()));
                            break;
                        case "price":
                            bookBean.setPrcie(Integer.parseInt(item1.getTextContent()));
                            break;
                    }
                }
                bookBeans.add(bookBean);
            }
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Pull解析Xml文件

public void Pull_xml(){
        try {
            XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory.newInstance();
            XmlPullParser xmlPullParser = xmlPullParserFactory.newPullParser();
            InputStream inputStream = getAssets().open("book.xml");
            xmlPullParser.setInput(inputStream,"utf-8");
            int eventType = xmlPullParser.getEventType();
            BookBean bookBean=null;
            while (eventType!=XmlPullParser.END_DOCUMENT){//文档开头
                switch (eventType){
                    case XmlPullParser.START_TAG:
                        if(xmlPullParser.getName().equals("book")){
                            bookBean=new BookBean();
                            String id = xmlPullParser.getAttributeValue(null, "id");
                            bookBean.id= Integer.parseInt(id);
                        }else if(xmlPullParser.getName().equals("name")){
                            String name = xmlPullParser.nextText();
                            bookBean.name=name;
                        }else if(xmlPullParser.getName().equals("author")){
                            String author = xmlPullParser.nextText();
                            bookBean.author=author;
                        }else if(xmlPullParser.getName().equals("year")){
                            String year = xmlPullParser.nextText();
                            bookBean.year=Integer.parseInt(year);
                        }else if(xmlPullParser.getName().equals("price")){
                            String price = xmlPullParser.nextText();
                            bookBean.prcie=Integer.parseInt(price);
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        if(xmlPullParser.getName().equals("book")) {
                            bookBeans.add(bookBean);
                        }
                        break;

                }
                // 再此读取下一标签
                eventType=xmlPullParser.next();
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Sax解析xml文件

自定义一个类继承DefaultHandler,然后重写5个方法,其中有4中情况

1.文档开始
2.文档结束
3.标签开始
4.标签结束

 class MyHandler extends DefaultHandler{


        BookBean bookBean;
        String Tem;//用来存放解出来的字符串
        //文档开始
        @Override
        public void startDocument() throws SAXException {
            super.startDocument();
            bookBeans=new ArrayList<>();

        }

        //文档结束
        @Override
        public void endDocument() throws SAXException {
            super.endDocument();
            //文档结束不做处理
        }

        //标签开始
        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            super.startElement(uri, localName, qName, attributes);
            if(qName.equals("book")){
                bookBean=new BookBean();
                bookBean.id= Integer.parseInt(attributes.getValue("id"));
            }
        }
          //标签结束
        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            super.endElement(uri, localName, qName);
            if(qName.equals("name")){
                bookBean.name=Tem;
            }else if(qName.equals("author")){
                bookBean.author= Tem;
            }else if(qName.equals("year")){
                bookBean.year= Integer.parseInt(Tem);
            }else if(qName.equals("price")){
                bookBean.prcie= Integer.parseInt(Tem);
            }
            if(qName.equals("book")){
                bookBeans.add(bookBean);
            }
        }

        //类型转换
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            super.characters(ch, start, length);

            Tem=new String(ch,start,length);
        }

    }

接下来使用我们自定义的类实现Sax解析

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值