imooc 网上xml 解析课程笔记
初识xml
表现:以 .xml 为文件扩展名的文件存储:树形结构
为什么用xml: 1、不同应用程序之间通信? 订票软件 支付软件
2、不同平台的通信 ? mac os windows
3、不同平台间数据的共享? 网站 手机app
用相同的xml把不同的平台链接起来
常用节点类型
节点类型 nodeName 返回值 nodeValue 返回值
1:element element name null
2:attr 属性名称 属性值
3: text #text 节点内容
例如: <book id="1">
<name>冰与火之歌</name>
</book>
book name 冰与火之歌 都是 element
id="1" 是 attr
之间换行空格就是 text
注意:encoding="utf-8" 中 utf 小写
解析方式pk(整体)
基础方法:DOM,SAX,不用导入jar包
DOM平台无关的官方解析方式,不仅限与java
一次读取所有内容
优点:形成了树形结构,直观好理解,代码更容易编写
解析过程中树结构保留在内存中,方便修改
缺点:DOM解析 xml文件十分大的时候,占用内存,会发生内存溢出
SAX java 平台提供的解析方式,基于事件驱动的解析方式
一步步解析,首先对 <?xml?> 触发 startDocument() 方法
然后对后面开始节点 <> 触发 startElement() 方法
对后面结束节点 </>触发 endElement() 方法
最后节点触发 endDocument() 方法
优点:采用事件驱动模式,对内存耗费小
使用只需要处理xml中数据
缺点:不易编码,难同时访问一个xml中多处不同数据
扩展方法:JDOM、DOM4J,在 SAX 基础上扩展而来,只能在 java 平台上
JDOM:仅使用具体类不使用接口,API大量使用了 Collections 类
DOM4J:JDOM 的一种智能分支,合并许多超出基本xml文档表示的功能
使用接口和抽象基本类方法,是个优秀的 java CML API
性能优异、灵活性好、功能强大和极端易用使用的特点
DOM4J 性能高于 JDOM
解析xml文件:java 程序中读取 xml 文件的过程
解析目的:获取节点名、节点值、属性名、属性值
DOM 方式解析xml 步骤
准备工作:
DocumentBuilderFactory:创建一个 DocumentBuilderFactory 对象
DocumentBuilder : 创建一个 DocumentBuilder 对象
Document : 通过 DocumentBuilder 对象的 parse(String fileName) 方法方法加载 xml 文件到 Document
遍历节点:
NodeList : 通过document.getElementsByTagName(String) 获取所有节点的集合 NodeList
Node : 通过 nodelist.item(int) 索引值获得一个节点 Node ( nodelist 的索引值从 0 开始)
遍历节点属性:
NamedNodemap: 通过 Node.getAttributes() 获取 node 节点所有属性集 NamedNodemap
node: 通过 NamedNodemap.item() 方法获取 book 某一个属性 node
属性名、属性值: node.getNodeName()、node.getNodeValue()
节点有且只有一个 属性,不需遍历 Element book = (Element)bookList.item(i);
book.getAttribute("id");
遍历节点子节点; 空格换行也算一个text子节点,名称为#text
NodeList : 通过NodeList childnodes = Node.getChildNodes()获得子节点
或者用getTextContent(),把该节点下所有子节点
SAX 解析原理
Handler 遍历,startElement 开始,endElement 结束
准备工作:
SAXParserFactory 创建一个 factory 实例
SAXParser 创建一个 parser 实例
Handler 创建一个类继承 DefaultHandler ,重写一些方法进行业务处理并创建这个实例
parser.parse("books.xml", handler);加载解析文件
startElement() 遍历<>标签及属性值