四种不同的XML解析方法: 1 DOM 工厂类:由抽象类javax.xml.parser.DocumentBuilderFactory.newInstance()获取实现工厂类 ACM工厂类: org.apache.xerces.jaxp.DocumentBuilderFactoryImpl(ie3rdpartylibs.jar/Meta-INF/services/javax.xml.parser.DocumentBuilderFactory) JRE默认类:com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl 解析结果: org.w3c.dom.Document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(...) 2 SAX 工厂类:由抽象类javax.xml.parsers.SAXParserFactory.newInstance()获取实现工厂类 ACM工厂类: org.apache.xerces.jaxp.SAXParserFactoryImpl(ie3rdpartylibs.jar/Meta-INF/services/javax.xml.parser.SAXParserFactory) JRE默认类:com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl 解析过程:SAXParserFactory.newInstance().newSAXParser().parse(...) 3 JDOM - 解析器使用Xerces/Crimson SAX解析器:new org.jdom.input.SAXBuilder() 解析结果:org.jdom.Document = SAXBuilder.build(...) DOM互换: org.jdom.Document = org.jdom.input.DOMBuilder.build(org.w3c.dom.Document),org.w3c.dom.Document = org.jdom.output.DOMOutputer.output(org.jdom.Document) 4 DOM4J - 解析器使用Xerces/Crimson/Alfred2 SAX解析器:new org.dom4j.io.SAXReader() 解析结果:org.dom4j.Document = SAXReader.read(...) DOM互换: org.dom4j.Document = org.dom4j.io.DOMReader.read(org.w3c.dom.Document),org.w3c.dom.Document = org.dom4j.io.DOMWriter.write(org.dom4j.Document) 综合评价: 1. DOM和SAX只是两种不同的解析XML的方式,而不是具体的解析工具,DOM在内存中构建一个完整的XML树,对资源要求高;而SAX是基于XML事件的处理方式,对资源要求低。 2. DOM4J是基于JAVA实现的一种XML解析和处理工具。它性能较好,默认应优先采用 3. JDOM也是基于JAVA实现的一种XML解析和处理工具。性能不佳,10M大小以内的文件可以考虑使用。 4. JDOM和DOM4J既能进行XML文件或流解析成DOCUMENT,又能将DOCUMENT保存为XML文件或流,但是它们的Document是自定义的,因此存在不可移植性 5. 如果应用程序只使用DOM、SAX并且符合JAXP的规范接口,则理论上说底层的XML解析器是可以切换的,具有最大的可移植性 6. 解析器有Xerces,Crimson,Alfred2等,它们符合JAXP规范,并且做的是具体的XML解析处理工作 |