参考资料:
官网
XML文件解析DOM解析和SAX解析
- dom:把整个XML文档放入内存,适合XML随机访问,占用内存资源大
- sax:事件驱动型的XML解析方式,顺序读取,不用一次装载整个文件,遇到标签会触发一个事件,适合对XML的顺序访问,占用内存资源稍小
1、SAX解析
1.1 使用方
- logback读取配置
1.2 sax实现流程,核心定义saxEventRecorder 。
整体实现
//获取解析器
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
//使用saxEventRecorder ,解析文件
parser.parse("src/com/briup/test3/book.xml", saxEventRecorder );
saxEventRecorder 实现
public class SaxEventRecorder extends DefaultHandler
{
//解析开始标题文档
public void startDocument() throws SAXException {
System.out.println("<?xml version= 1.0 encoding= utf-8 ?>");
}
//解析节点
@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes) throws SAXException {
System.out.print("<"+qName+" ");
for (int i = 0; i < attributes.getLength(); i++) {
System.out.print(attributes.getQName(i)+"="+attributes.getValue(i));
}
System.out.print(">");
}
@Override
//解析结束
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.print("</"+qName+">");
}
@Override
//解析内容
public void characters(char[] ch, int start, int length)
throws SAXException {
String string = new String(ch, start, length);
System.out.print(string);
}
}
2、DOM解析
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
if (entityResolver != null) {
docBuilder.setEntityResolver(entityResolver);
}
if (errorHandler != null) {
docBuilder.setErrorHandler(errorHandler);
}
docBuilder.parse(inputSource);
网友评论