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

Java SAX Parser - 查询XML文档

Java SAX分析器查询XML文档 - 从简单和简单的步骤学习Java XML,从基本到高级概念,包括概述,Java XML分析器,DOM分析器,解析XML文档,查询XML文档,创建XML文档,修改XML文档,SAX Parser,JDOM XML Parser,StAX Parser,XPath Parser,DOM4J Parser,XSLT,JAXB。

演示示例

以下是我们需要查询rollno的输入文本文件:393

         dinkar      kad      dinkar      85               Vaneet      Gupta      vinni      95               jasvir      singn      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;   String rollNo = null;   @Override   public void startElement(      String uri, String localName, String qName, Attributes attributes)      throws SAXException {      if (qName.equalsIgnoreCase("student")) {         rollNo = attributes.getValue("rollno");      }      if(("393").equals(rollNo) &&          qName.equalsIgnoreCase("student")) {         System.out.println("Start Element :" + qName);            }             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")) {         if(("393").equals(rollNo) && qName.equalsIgnoreCase("student"))         System.out.println("End Element :" + qName);      }   }   @Override   public void characters(char ch[], int start, int length) throws SAXException {      if (bFirstName && ("393").equals(rollNo)) {         //age element, set Employee age         System.out.println("First Name: " + new String(ch, start, length));         bFirstName = false;      } else if (bLastName && ("393").equals(rollNo)) {         System.out.println("Last Name: " + new String(ch, start, length));         bLastName = false;      } else if (bNickName && ("393").equals(rollNo)) {         System.out.println("Nick Name: " + new String(ch, start, length));         bNickName = false;      } else if (bMarks && ("393").equals(rollNo)) {         System.out.println("Marks: " + new String(ch, start, length));         bMarks = false;      }   }}

SAXQueryDemo.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 SAXQueryDemo {   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;   String rollNo = null;   @Override   public void startElement(String uri,       String localName, String qName, Attributes attributes)      throws SAXException {      if (qName.equalsIgnoreCase("student")) {         rollNo = attributes.getValue("rollno");      }      if(("393").equals(rollNo) && qName.equalsIgnoreCase("student")) {         System.out.println("Start Element :" + qName);            }             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")) {         if(("393").equals(rollNo)             && qName.equalsIgnoreCase("student"))            System.out.println("End Element :" + qName);      }   }   @Override   public void characters(      char ch[], int start, int length) throws SAXException {      if (bFirstName && ("393").equals(rollNo)) {         //age element, set Employee age         System.out.println("First Name: " + new String(ch, start, length));         bFirstName = false;      } else if (bLastName && ("393").equals(rollNo)) {         System.out.println("Last Name: " + new String(ch, start, length));         bLastName = false;      } else if (bNickName && ("393").equals(rollNo)) {         System.out.println("Nick Name: " + new String(ch, start, length));         bNickName = false;      } else if (bMarks && ("393").equals(rollNo)) {         System.out.println("Marks: " + new String(ch, start, length));         bMarks = false;      }   }}

这会产生以下结果 :

Start Element :studentFirst Name: dinkarLast Name: kadNick Name: dinkarMarks: 85End Element :student