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可移植性差,-_- 本人表示不理解,希望有路过的大佬解惑)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值