java之SAX解析XML

来源:互联网 发布:北京工业大学软件考研 编辑:程序博客网 时间:2024/05/16 14:37

SAX采用事件处理方式解析XML文件。利用SAX解析XML文件。涉及到两部分:解析器和事件处理。

解析器可以属于JAXP的API创建,创建SAX解析器后,就可以指定SAX解析器去解析某个XML文档了。

解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理的一个方法,解析器在调用事件的处理方法时,会把当前解析的XML内容当做方法的参数传给事件处理器。

事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松的得到SAX解析器解析的到的数据,从而决定如何对数据进行处理。

// 创建解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();

// 得到解析器
SAXParser parser = factory.newSAXParser();

// 得到读取器
XMLReader reader = parser.getXMLReader();

// 设置内容处理器
reader.setContentHandler(new ListHandler());

// 读取XML文档
reader.parse("src/2.xml");



class ListHandler implements ContentHandler{


@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
// 得到开始节点的名称
System.out.println("<"+qName+">");

// 判断节点是否是有属性
for(int i = 0;atts != null && i<atts.getLength();i++){
String attName = atts.getQName(i);
String attValue = atts.getValue(i);
System.out.println(attName+"=="+attValue);
}
}

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println(new String(ch,start,length));
}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// 得到结束节点的名称
System.out.println("</"+qName+">");

}


@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub

}


@Override
public void endPrefixMapping(String prefix) throws SAXException {
// TODO Auto-generated method stub

}


@Override
public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub

}


@Override
public void processingInstruction(String target, String data)
throws SAXException {
// TODO Auto-generated method stub

}


@Override
public void setDocumentLocator(Locator locator) {
// TODO Auto-generated method stub

}


@Override
public void skippedEntity(String name) throws SAXException {
// TODO Auto-generated method stub

}


@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub

}


@Override
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
// TODO Auto-generated method stub

}

}