解析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); }