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

SAX解析器 - 解析XML文档

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

演示示例

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

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

UserHandler.java

package com.it1352.XML; import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class UserHandler extends DefaultHandler {   boolean bFirstName = false;   boolean bLastName = false;   boolean bNickName = false;   boolean bMarks = false;   @Override   public void startElement(String uri,       String localName, String qName, Attributes attributes) throws SAXException {      if (qName.equalsIgnoreCase("student")) {         String rollNo = attributes.getValue("rollno");         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;      }   }   @Override   public void endElement(String uri, String localName, String qName) throws SAXException {      if (qName.equalsIgnoreCase("student")) {         System.out.println("End Element :" + qName);      }   }   @Override   public void characters(char ch[], int start, int length) throws SAXException {      if (bFirstName) {         System.out.println("First Name: " + new String(ch, start, length));         bFirstName = false;      } else if (bLastName) {         System.out.println("Last Name: " + new String(ch, start, length));         bLastName = false;      } else if (bNickName) {         System.out.println("Nick Name: " + new String(ch, start, length));         bNickName = false;      } else if (bMarks) {         System.out.println("Marks: " + new String(ch, start, length));         bMarks = false;      }   }}

SAXParserDemo.java

package com.it1352.xml; import java.io.File;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class SAXParserDemo {   public static void main(String[] args){      try {         File inputFile = new File("input.txt");         SAXParserFactory factory = SAXParserFactory.newInstance();         SAXParser saxParser = factory.newSAXParser();         UserHandler userhandler = new UserHandler();         saxParser.parse(inputFile, userhandler);           } catch (Exception e) {         e.printStackTrace();      }   }   }class UserHandler extends DefaultHandler {   boolean bFirstName = false;   boolean bLastName = false;   boolean bNickName = false;   boolean bMarks = false;   @Override   public void startElement(String uri,       String localName, String qName, Attributes attributes) throws SAXException {      if (qName.equalsIgnoreCase("student")) {         String rollNo = attributes.getValue("rollno");         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;      }   }   @Override   public void endElement(String uri,       String localName, String qName) throws SAXException {      if (qName.equalsIgnoreCase("student")) {         System.out.println("End Element :" + qName);      }   }   @Override   public void characters(char ch[],       int start, int length) throws SAXException {      if (bFirstName) {         System.out.println("First Name: " + new String(ch, start, length));         bFirstName = false;      } else if (bLastName) {         System.out.println("Last Name: " + new String(ch, start, length));         bLastName = false;      } else if (bNickName) {         System.out.println("Nick Name: " + new String(ch, start, length));         bNickName = false;      } else if (bMarks) {         System.out.println("Marks: " + new String(ch, start, length));         bMarks = false;      }   }}

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

Roll No : 393First Name: DinkarLast Name: KadNick Name: DinkarMarks: 85End Element :studentRoll No : 493First Name: VineetLast Name: GuptaNick Name: VinniMarks: 95End Element :studentRoll No : 593First Name: JasvirLast Name: SinghNick Name: JazzMarks: 90End Element :student