步骤1.一个简单的XML文档: Xml代码 <?xml version="1.0" encoding="GBK"?> <StudentInfo> <student> <name>赵海波</name> <sex>男</sex> <lesson> <lessonName>Spring整合开发</lessonName> <lessonScore>85</lessonScore> </lesson> <lesson> <lessonName>轻量级J2EE应用开发</lessonName> <lessonScore>95</lessonScore> </lesson> <lesson> <lessonName>Ajax应用开发</lessonName> <lessonScore>80</lessonScore> </lesson> </student> <student> <name>程卫娜</name> <sex>女</sex> <lesson> <lessonName>Spring整合开发</lessonName> <lessonScore>80</lessonScore> </lesson> <lesson> <lessonName>轻量级J2EE应用开发</lessonName> <lessonScore>85</lessonScore> </lesson> <lesson> <lessonName>Ajax应用开发</lessonName> <lessonScore>90</lessonScore> </lesson> </student> </StudentInfo> 步骤2.用于处理XML文档的事件监听器: Java代码 import org.xml.sax.*; public class XMLContentHandler implements ContentHandler { //DTD中定义的元素名 private static final String ELEMENT_NAME = "name"; private static final String ELEMENT_SEX = "sex"; private static final String ELEMENT_LESSON = "lesson"; private static final String ELEMENT_LESSON_NAME = "lessonName"; private static final String ELEMENT_LESSON_SCORE = "lessonScore"; private static final String ELEMENT_STUDENT = "student"; private static final String ELEMENT_LINE = "breakLine"; //当前元素的数据 private String currentData = ""; private String lessonName = ""; private String lessonScore = ""; //当其他某一个调用事件发生时,先调用此方法来在文档中定位。 public void setDocumentLocator(Locator locator) { } //在解析整个文档开始时调用 public void startDocument() throws SAXException { System.out.println("XML文件开始解析"); } //在解析整个文档结束时调用 public void endDocument() throws SAXException { System.out.println("XML文件解析结束"); } // 在解析命名空间开始时调用 public void startPrefixMapping(String prefix, String uri) throws SAXException { System.out.println("XML解析器开始解析命名空间"); } //在解析命名空间结束时调用 public void endPrefixMapping(String prefix) throws SAXException { System.out.println("XML解析器解析命名空间结束"); } //在解析元素开始时调用 public void startElement(String namespaceURI, String localName,String qName, Attributes atts) throws SAXException { System.out.println("XML解析器开始解析元素" + localName); } //在解析元素结束时调用 public void endElement(String namespaceURI, String localName, String qName) throws SAXException { if (localName.equals(ELEMENT_NAME)) { System.out.println(localName + " : " + currentData); } if (localName.equals(ELEMENT_SEX)) { System.out.println(localName + " : " + currentData); } if (localName.equals(ELEMENT_LESSON_NAME)) { this.lessonName = currentData; } if (localName.equals(ELEMENT_LESSON_SCORE)) { this.lessonScore = currentData; } if (localName.equals(ELEMENT_LESSON)) { System.out.println(lessonName + " : " + lessonScore); } System.out.println("XML解析器解析元素" + localName + "结束"); } // 取得元素数据 public void characters(char[] ch, int start, int length) throws SAXException { currentData = new String(ch, start, length).trim(); System.out.println("XML解析器成功解析到元素数据"); } //取得元素数据中的空白 public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { } //在解析到处理指令时,调用此方法。 public void processingInstruction(String target, String data) throws SAXException { } //当未验证解析器忽略实体时调用此方法 public void skippedEntity(String name) throws SAXException { } } 步骤3.通过主程序开始解析XML文档,解析XML文档的代码如下: import java.io.*; import org.xml.sax.*; import org.xml.sax.helpers.*; public class SAXParser { public static void main(String[] args) { SAXParser sax = new SAXParser(); sax.parseXMLFile("student.xml"); } // 解析文档 private void parseXMLFile(String fileName) { try { //通过指定解析器的名称来动态加载解析器 XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser"); //处理内容前要注册内容管理器 parser.setContentHandler(new XMLContentHandler()); //开始解析文档 parser.parse(fileName); } catch (IOException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } } }