开发手册 欢迎您!
软件开发者资料库

StAX解析器 - 查询XML文档

Apache Xerces StAX Parser to Parse Query XML文档 - 从简单和简单的步骤学习Apache Xerces,从基本到高级概念,包括概述,Apache Xerces XML解析器,DOM解析器,解析XML文档,查询XML文档,创建XML文档,修改XML Document,SAX Parser,StAX Parser。

演示示例

以下是我们需要解析的输入xml文件;

         Dinkar      Kad      Dinkar      85               Vineet      Gupta      Vinni      95               Jasvir      Singh      Jazz      90   

StAXParserDemo.java

package com.it1352.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 StAXQueryDemo {   public static void main(String[] args) {      boolean bFirstName = false;      boolean bLastName = false;      boolean bNickName = false;      boolean bMarks = false;      boolean isRequestRollNo = false;      try {         XMLInputFactory factory = XMLInputFactory.newInstance();         XMLEventReader eventReader = factory.createXMLEventReader(            new FileReader("input.txt"));         String requestedRollNo = "393";         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")) {                     Iterator attributes = startElement.getAttributes();                     String rollNo = attributes.next().getValue();                     if(rollNo.equalsIgnoreCase(requestedRollNo)){                        System.out.println("Start Element : student");                        System.out.println("Roll No : " + rollNo);                        isRequestRollNo = true;                     }                  } 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 && isRequestRollNo){                     System.out.println("First Name: " + characters.getData());                     bFirstName = false;                  }                  if(bLastName && isRequestRollNo){                     System.out.println("Last Name: " + characters.getData());                     bLastName = false;                  }                  if(bNickName && isRequestRollNo){                     System.out.println("Nick Name: " + characters.getData());                     bNickName = false;                  }                  if(bMarks && isRequestRollNo){                     System.out.println("Marks: " + characters.getData());                     bMarks = false;                  }                  break;               case  XMLStreamConstants.END_ELEMENT:                  EndElement endElement = event.asEndElement();                  if(endElement.getName().getLocalPart().equalsIgnoreCase("student") && isRequestRollNo){                     System.out.println("End Element : student");                     System.out.println();                     isRequestRollNo = false;                  }                  break;            }             }      } catch (FileNotFoundException e) {         e.printStackTrace();      } catch (XMLStreamException e) {         e.printStackTrace();      }   }}

上述程序将产生以下结果 :

Start Element : studentRoll No : 393First Name: DinkarLast Name: KadNick Name: DinkarMarks: 85End Element : student