XML的4种解析方式浅谈

DOM

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance()
DocumentBuilder db = dbf.newDocumentBuilder()
Document document = db.parse(文件流、输入流或者url地址)

Document ____________文档类
NodeList ____________节点集合类
Node ________________节点类(也可以是属性类)
NamedNodeMap_________属性集合

优点:形成树结构,便于理解,操作简单,可以修改XML文件
缺点:文件是一次性读取,内存的耗费大,如果XML较大容易影响性能且可能内存溢出


SAX

新建类(SAXParserHandler)继承类DefaultHandler
SAXParserFactory factory = SAXParserFactory.newInstance()
SAXParser parser = factory.newSAXParser()
SAXParserHandler handler = new SAXParserHandler()
parser.parse(文件流、输入流或者url地址)

解析开始前调用
startDocument()

解析结束后调用
endDocument()

开始解析当前节点
startElement(String uri, String localName, String qName,Attributes attributes)

当前节点解析结束调用
endElement(String uri, String localName, String qName)

当前节点解析结束前调用(new String(ch, start, length)可以获取节点内容文本)
characters(char[] ch, int start, int length)

uri_______________
localName_________
qName_____________当前节点名
attributes________当前节点属性集合
ch________________当前节点内容文本字节数组
start_____________字节数组开始位置
length____________字节数组长度

优点:采用事件驱动模式,对内存耗费比较小
缺点:编码麻烦,访问XML数据由是由上往下,不能同时访问多个节点


JDOM(需要导入jdom.jar包)

SAXBuilder saxBuilder = new SAXBuilder()
Document document = saxBuilder.build(文件流、输入流或者url地址)

Document ___________文档类,必须先用Document .getRootElement()获取根节点,再由根节点获取其他节点
Element_____________节点类
Attribute___________属性类

特征:
1、仅使用具体类,而不使用接口
2、API大量使用了Collections类。


DOM4J(需要导入dom4j.jar包)

SAXReader reader = new SAXReader()
Document document = reader.read(文件流、输入流或者url地址)

Document ___________文档类,必须先用Document .getRootElement()获取根节点,再由根节点获取其他节点
Element_____________节点类
Attribute___________属性类

特征:
1、JDOM的一种智能分支,它合并了许多超出基本XML文档表示的功能。
2、它使用接口和抽象基本类方法。
3、具有性能优异、灵活性好、功能强大和极端易用的特点。
4、是一个开放源码的文件


总述:
JDOM 和 DOM 在性能测试时表现不佳,在测试 10M 文档时内存溢出。在小文档情况下还值得考虑
SAX可以根据需求解析XML文件,在达成某些条件之后可以停止解析,对于大型文档来说非学有利
DOM4J性能最优,推荐使用
**(互联网上都说DOM4J可移植性差,-_- 本人表示不理解,希望有路过的大佬解惑)**

猜你喜欢

转载自blog.csdn.net/qq_39652227/article/details/81705917