您的位置:首页 > 其它

sax(用于处理XML事件驱动的推模型)解析例子

2014-08-13 11:47 417 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: