jdk 中常用的 xml 数据解析
来源:互联网 发布:繁体字转换简体字 mac 编辑:程序博客网 时间:2024/05/17 05:00
xml(extensible markup language) 是一种可扩展标记语言,允许用户自定义复杂的数据结构,json(javascript object notation),可以认为是 JS 对象的文本表现形式,本质是字符串。xml、json 都是一种数据格式,最大的用途是用作数据的格式载体,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
xml
语法规范:详看
1.文档声明:<?xml version="1.0" encoding="UTF-8"?>2.标签元素需要闭合3.只能有一个根元素(根标签)4.XML 标签对大小写敏感......
常用解析方式:dom、sax、pull 解析
dom(Document Object Mode) 解析,在 js 编程中经常听说过。解析大概流程是这样的:先获取 xml 文件对应的 document 对象(树结构),然后调用其中的方法遍历数据 。其缺点是 dom 解析时会把整个 xml 映射成doc 树状对象,对于大的 xml 文件,会造成占用内存大,查找慢的问题。于是就出现了 sax 解析。
sax(Simple API for XML)解析,它逐行扫描文档,一边扫描一边解析,因此不需要将所有数据存储在内存中。因为逐行扫描,边扫描边解析,所有在解析过程中,我们要自定义处理实体,即实现 sax 提供的回调处理接口。其缺点是只能进行 xml 文件的读取,不能写,而且一开始解析就必须解析到结束,不能中途停止。
pull 解析,解决了 dom 和 sax 的遗留问题,和 sax 一样都是事件驱动的。
解析例子:
<?xml version="1.0" encoding="utf-8"?><books> <book> <name>java编程思想</name> <author>Bruce Eckel</author> <price>55</price> </book> <book> <name>数据结构与算法设计</name> <author>严蔚敏</author> <price>35</price> </book></books>
dom 解析
注意在 dom 结构中节点类型分三种,元素节点、属性节点、文本节点,可以通过 getNodeType() 方法判断,返回值 1、2、3 分别对应这三种类型。在上面给出的例子中,book 的子节点有 7 个,分别是 4 个文本节点,3 个元素节点。
sax 解析
因为 sax 是逐行解析的,事件驱动,所以我们要自行实现事件回调处理,其实就是继承或实现某些 handler , 关键是理清各个回调方法的调用顺序。我们可以通过查看文档方式找到相关的 handler。
两种种方式结果均一致
pull 方式,需要依赖 kxml、 xmlpull 两个 jar 包,在Android中极力推荐的xmlpull方式解析xml,其实用流程与 sax 方式相似。
小结:这几种方式大致流程都是相似的,先获取工厂,通过工厂(工厂设计模式)获取响应的解析器(或者获取 builder,再 build 出相应的解析器 ),得到解析器后就解析,并调用相关方法遍历数据。
JAXB 可以认为是一个 xml 与 java 类间的 orm 映射框架,有点像 hibernate 是一个数据库与 java 类间的 orm 映射框架。通过 JAXB 可以,直接把 xml 转换为对应的 java 对象。
使用 JAXB ,主要是从 JAXBContext 上下文对象获取 Marshaller 和 Unmarshaller 对象,Marshaller 是用来把对象解析到 xml 中的,Unmarshaller 是从 xml 中解析出对象。
注意,这里的 java 对象,是一个 Java bean,其中成员变量名称要和对应的标签名一致(估计这里是使用反射实现的,因此名称要一致)。对应 xml 根元素的类,需要上注解。
结果
json 的解析下一节待续…
- jdk 中常用的 xml 数据解析
- JDK中JAXP寻找XML解析器的顺序
- xml数据的解析
- XML数据的解析
- xml数据的解析
- Android解析xml数据的一种常用方式——PULL解析器解析
- Android中XML数据解析
- Android中XML数据解析
- Android中XML数据解析
- Android中XML文件常用解析方式的比较分析
- android中常用的xml生成与解析
- Xml解析之dom4j中常用的方法
- android中常用的xml解析器(笔记)
- dom4j中xml解析的一些常用方法
- 工作中常用的XML解析Java代码实现
- 更改jdk的默认xml解析器
- XML解析常用的技术
- JDK 中常用的包
- C++智能指针
- linux查看内存占用情况(简洁版)
- 如何有效防止SQL注入
- 动态规划:HDU1176-免费馅饼
- Python标准库--random,sys,time
- jdk 中常用的 xml 数据解析
- OPP文件传输
- 关于C中的\n
- 剑指offer | 训练题52:表示数值的字符串
- LeetCode 561 Array Partition I
- Redis-数据库管理
- 方法(二)
- 孪生数(因数之和)
- Android Studio在导入moudle后出现layout布局文件无法显示