解析xml

解析xml使用两种方式

第一

使用XMLStreamReader,使用光标的方式

@Test
    public void testread() throws Exception {
        InputStream ios =  XMLRead.class.getClassLoader().getResourceAsStream("persion.xml");
        XMLInputFactory factory = XMLInputFactory.newInstance();
        XMLStreamReader reader = factory.createXMLStreamReader(ios);
        while(reader.hasNext()){
            int type = reader.next();
            if(type==XMLStreamReader.START_ELEMENT){
                System.out.println(reader.getName());
            }else if(type==XMLStreamReader.CHARACTERS){
                System.out.println(reader.getText().trim());
            }else if(type==XMLStreamReader.END_ELEMENT){
                System.out.println("/"+reader.getName());
            }
        }

    }

 

第二

XMLEventReader使用基于迭代模型的方式

/**
     * 基于迭代模型的方式
     * @throws Exception
     */
    @Test
    public void testread3() throws Exception {
        InputStream ios =  XMLRead.class.getClassLoader().getResourceAsStream("persion.xml");
        XMLInputFactory factory = XMLInputFactory.newInstance();
        XMLEventReader reader = factory.createXMLEventReader(ios);
        while(reader.hasNext()){
            XMLEvent eve = reader.nextEvent();
            if(eve.isStartElement()){
                String name = eve.asStartElement().getName().toString();
                System.out.println(name);
            }
        }

    }

优化后迭代模型

@Test
    public void testread4() throws Exception {
        InputStream ios = XMLRead.class.getClassLoader().getResourceAsStream("persion.xml");
        XMLInputFactory factory = XMLInputFactory.newInstance();
        XMLEventReader reader = factory.createFilteredReader(factory.createXMLEventReader(ios), new EventFilter() {
            @Override
            public boolean accept(XMLEvent event) {
                if (event.isStartElement()) {
                    return true;
                }
                return false;
            }
        });
        
        int num = 0;
        while (reader.hasNext()) {
            XMLEvent eve = reader.nextEvent();
            if (eve.isStartElement()) {
                String name = eve.asStartElement().getName().toString();
                System.out.println(name);
            }
            num++;
        }
        System.out.println(num);
    }

 

posted @ 2016-10-10 10:58  宋发准  阅读(147)  评论(0编辑  收藏  举报