1 DOM解析
是将这个xml文件装入内存
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("books.xml");
Element bookStore = document.getDocumentElement();//获取根节点。
节点有三种:元素节点、属性节点、文本节点
getTextContent() 获取节点的文本
getFirstChild().getNodeValue() //获取子节点,俩个方法都可以获取文本,视具体情况而定。
2 SAX解析
是将xlm文档从上到下解析,一步一步来解析元素节点,将解析xml的工作交给了Handler,所以需要用户自己实现DefaultHandler
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParse = factory.newSAXParser();
SAXHandler handler = new SAXHandler();
saxParse.parse(newFileInputStream("books.xml"), handler);
public void startDocument() throws SAXException {
}
public void endDocument() throws SAXException {
}
当文档开始解析和结束解析会调用上面的方法
public void startElement(String arg0, String arg1, String arg2, Attributes arg3) throws SAXException {}
public void endElement(String arg0, String arg1, String arg2) throws SAXException {}
解析elements,
public void characters(char[] arg0, int arg1, int arg2) throws SAXException {
}
用来保存整个xml文档的,可以通过String st = new String(ch, start, length);来获得当前元素的内容,空白节点也算
3 JDOM解析:有点类似DOM解析
导入jdom.jar 。org.jdom2
SAXBuilder builder = new SAXBuilder();
InputStream is = new FileInputStream("books.xml");
Document document = builder.build(is);
Element element = document.getRootElement(); //获取根节点
List<Element> bookList = element.getChildren();
处理乱码问题:通过InputStreamReader来实现
InputStream is = new FileInputStream("books.xml");
Reader reader = new InputStreamReader(is, "utf-8");
Document document = builder.build(reader);
4 DOM4j解析:
导入jar,获取元素使用的都是迭代器
SAXReader reader = new SAXReader();
Reader r = new InputStreamReader(new FileInputStream("books.xml"), "UTF-8");
Document document = reader.read(r);
Element element = document.getRootElement();
Iterator<Element> iterator = element.elementIterator();
总结
DOM和SAX解析是官方提供的,DOM解析是平台无关的,SAX是基于事件驱动的,剩下的俩种是从这里衍生出来的,只能Java使用
DOM:形成树结构,便于理解,解析过程中树结构留在了内存中,可以一边修改一边解析,xml文件过大时可能会造成内存溢出
SAX:是基于事件驱动解析的,即一步一步来解析,从元素的开始标签到结束,内存耗费小,适用于只处理数据的情况。 不宜编码,访问同一xml的不同位置比较费劲
JDOM:使用具体类,获取子节点或元素都是通过集合形式
DOM4J:使用抽象和接口,性能优异,功能强大
解析速度:SAX最快,一般使用DOM4J