我很擅长使用SAX解析器。任何人都可以告诉我如何运行它。以及运行它需要什么(jdk)..我可以有一个可以解析android xml和普通xml的sax解析器
答案 0 :(得分:0)
SAX解析器是通过创建ContentHandler
对象来实现的,该对象实现某些回调函数,这些回调函数对应于解析XML文档时发生的事件。例如,当解析器开始解析文档时调用startDocument
方法,并在发现新标记时调用startElement
;同样,当解析器找到标记或文档的末尾,或者发现无效序列时,会调用endElement
,endDocument
和error
。
This example显示了如何使用SAX解析器。关键是MyHandler
类扩展了DefaultHandler
类(实现了ContentHandler
接口)并覆盖了每个回调方法的空实现。
以这种方式思考:Java SAXParser
类知道如何解析XML文档,但是当它发现感兴趣的东西时,它依赖于某个处理程序类来知道如何处理它们。 DefaultHandler
类是一个帮助器实现,您可以扩展它以关注有趣的事情。
答案 1 :(得分:0)
您可以直接使用ContentHandler(参见下文),而不是根据需要扩展DefaultHandler。我相信这个级别的SAX解析可以在Android平台上使用。
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.XMLReader;
public class Demo {
public static void main(String[] args) throws Exception {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
xr.setContentHandler(new MyContentHandler());
xr.parse("input.xml");
}
private static class MyContentHandler implements ContentHandler {
public void setDocumentLocator(Locator locator) {
}
public void startDocument() throws SAXException {
}
public void endDocument() throws SAXException {
}
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
}
public void endPrefixMapping(String prefix) throws SAXException {
}
public void startElement(String uri, String localName, String qName,
System.out.println("START " + qName);
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("END " + qName);
}
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println(new String(ch, start, length));
}
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 {
}
}
}