SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser parser = factory.newSAXParser();
//SAXParserHandler新建类继承DefaultHandler类,重写其中方法来解析xml
SAXParserHandler handler = new SAXParserHandler();
parser.parse("tree.xml", handler);
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
public class SAXParserHandler extends DefaultHandler {
/**
* 文档开始解析时调用的方法
*/
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
}
/**
* 文档结束解析时调用的方法
*/
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
}
/**
* 解析开始标签
*/
@Override
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, name, attributes);
System.out.println("节点名:"+name);
//根据属性名获取属性值
// String id = attributes.getValue("id");
//遍历属性
for (int i = 0; i < attributes.getLength(); i++) {
System.out.println("属性名:"+attributes.getQName(i));
System.out.println("属性值:"+attributes.getValue(i));
}
}
/**
* 解析结束标签
*/
@Override
public void endElement(String uri, String localName, String name)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, name);
}
/**
* 解析文本内容
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
String value = new String(ch,start,length);
System.out.println("节点间文本:"+value);
}
}