sax(用于处理XML事件驱动的推模型)解析例子
SAX解析
Java程序如下:
import org.xml.sax.helpers.DefaultHandler; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; public class Test7 extends DefaultHandler { int indent = 0; public Test7() { } public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { if (qName == "response") { System.out.println("User: " + atts.getValue("username")); } else if (qName == "question") { thisQuestion = atts.getValue("subject"); } thisElement = qName; } public void endElement(String namespaceURI, String localName, String qName) throws SAXException { thisQuestion = ""; thisElement = ""; } public void characters(char[] ch, int start, int length) throws SAXException { if (thisElement == "question") { printIndent(4); System.out.print(thisQuestion + ": "); System.out.println(new String(ch, start, length)); } } public void startDocument() throws SAXException { System.out.println("Tallying survey results..."); indent = -4; } public void printIndent(int indentSize) { for (int s = 0; s < indentSize; s++) { System.out.print(" "); } } String thisQuestion = ""; String thisElement = ""; public static void main (String args[]) { XMLReader xmlReader = null; try { SAXParserFactory spfactory = SAXParserFactory.newInstance(); SAXParser saxParser = spfactory.newSAXParser(); xmlReader = saxParser.getXMLReader(); xmlReader.setContentHandler(new Test7()); InputSource source = new InputSource("surveys.xml"); xmlReader.parse(source); } catch (Exception e) { System.err.println(e); System.exit(1); } } }
xml文件如下:
<?xml version="1.0"?> <surveys> <response username="bob"> <question subject="appearance">A</question> <question subject="communication">B</question> <question subject="ship">A</question> <question subject="inside">D</question> <question subject="implant">B</question> </response> <response username="sue"> <question subject="appearance">C</question> <question subject="communication">A</question> <question subject="ship">A</question> <question subject="inside">D</question> <question subject="implant">A</question> </response> <response username="carol"> <question subject="appearance">A</question> <question subject="communication">C</question> <question subject="ship">A</question> <question subject="inside">D</question> <question subject="implant">C</question> </response> </surveys>
执行效果如下:
Tallying survey results...
User: bob
appearance: A
communication: B
ship: A
inside: D
implant: B
User: sue
appearance: C
communication: A
ship: A
inside: D
implant: A
User: carol
appearance: A
communication: C
ship: A
inside: D
implant: C