演示示例
这是输入需要解析 xml 文件:
<?xml version="1.0"?> <class> <student rollno="393"> <firstname>dinkar</firstname> <lastname>kad</lastname> <nickname>dinkar</nickname> <marks>85</marks> </student> <student rollno="493"> <firstname>Vaneet</firstname> <lastname>Gupta</lastname> <nickname>vinni</nickname> <marks>95</marks> </student> <student rollno="593"> <firstname>jasvir</firstname> <lastname>singn</lastname> <nickname>jazz</nickname> <marks>90</marks> </student> </class>
%uA0
StAXParserDemo.java
package com.yiibai.xml import java.io.FileNotFoundException import java.io.FileReader import java.util.Iterator import javax.xml.stream.XMLEventReader import javax.xml.stream.XMLInputFactory import javax.xml.stream.XMLStreamConstants import javax.xml.stream.XMLStreamException import javax.xml.stream.events.Attribute import javax.xml.stream.events.Characters import javax.xml.stream.events.EndElement import javax.xml.stream.events.StartElement import javax.xml.stream.events.XMLEvent public class StAXParserDemo { public static void main(String[] args) { boolean bFirstName = false boolean bLastName = false boolean bNickName = false boolean bMarks = false try { XMLInputFactory factory = XMLInputFactory.newInstance() XMLEventReader eventReader = factory.createXMLEventReader( new FileReader("input.txt")) while(eventReader.hasNext()){ XMLEvent event = eventReader.nextEvent() switch(event.getEventType()){ case XMLStreamConstants.START_ELEMENT: StartElement startElement = event.asStartElement() String qName = startElement.getName().getLocalPart() if (qName.equalsIgnoreCase("student")) { System.out.println("Start Element : student") Iterator<Attribute> attributes = startElement.getAttributes() String rollNo = attributes.next().getValue() System.out.println("Roll No : " + rollNo) } else if (qName.equalsIgnoreCase("firstname")) { bFirstName = true } else if (qName.equalsIgnoreCase("lastname")) { bLastName = true } else if (qName.equalsIgnoreCase("nickname")) { bNickName = true } else if (qName.equalsIgnoreCase("marks")) { bMarks = true } break case XMLStreamConstants.CHARACTERS: Characters characters = event.asCharacters() if(bFirstName){ System.out.println("First Name: " + characters.getData()) bFirstName = false } if(bLastName){ System.out.println("Last Name: " + characters.getData()) bLastName = false } if(bNickName){ System.out.println("Nick Name: " + characters.getData()) bNickName = false } if(bMarks){ System.out.println("Marks: " + characters.getData()) bMarks = false } break case XMLStreamConstants.END_ELEMENT: EndElement endElement = event.asEndElement() if(endElement.getName().getLocalPart().equalsIgnoreCase("student")){ System.out.println("End Element : student") System.out.println() } break } } } catch (FileNotFoundException e) { e.printStackTrace() } catch (XMLStreamException e) { e.printStackTrace() } } }
这将产生以下结果:
Start Element : student Roll No : 393 First Name: dinkar Last Name: kad Nick Name: dinkar Marks: 85 End Element : student Start Element : student Roll No : 493 First Name: Vaneet Last Name: Gupta Nick Name: vinni Marks: 95 End Element : student Start Element : student Roll No : 593 First Name: jasvir Last Name: singn Nick Name: jazz Marks: 90 End Element : student