解析XML
DOM(Java提供) (整个文件加载到内存中去执行解析)
SAX(Javat提供) 创建一个Handler类逐个节点的访问解析;个人理解因为不是一次性加载到内存,这个不提供修改保存;
JDOM
DOM4J
SAX 解析
准备工作
//创建SAXParserFactory
SAXParserFactory factory = SAXParserFactory.newInstance();
//创建SAXParser
SAXParser parser = factory.newSAXParser();
//创建DefaultHandler
SaxParserHandler handler = new SaxParserHandler();
//解析xml
parser.parse("books.xml", handler);
//如果需要暴露出解析的结果 需要DefaultHandler中处理并提供返回对象的方法
public class SaxParserHandler extends DefaultHandler {
@Override
public void startDocument() throws SAXException {
super.startDocument();
System.out.println("开始");
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
System.out.println("结束");
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
System.out.println("startElement");
//其中qName是element对应的标签名称 attributes是所有属性
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
super.endElement(uri, localName, qName);
System.out.println("endElement");
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
//原理是 handler 会记录标签的开始和结束为止 然后可以通过String(ch,start,length)得到内容
//如果需要保存到对象 在characters 中将 characters的值获取到, 保存到全局变量中,再在endElement中更加qName中去保存;
}
}
网友评论