概述:XML是一种可扩展的标记语言
XML是一种通用的数据交换格式;
一般的配置文件都是用XML格式
XML一般作为配置文件的存在,用来传输数据
XML语法:
1.文档第一行需要声明该文档时XML文档(注意编码格式)
2.标签内容成对出现<xx></xx>
3.如没有内容可以使用但标签<xx/>
4.标签中可以带属性,格式:属性名="属性值"
5.在XML文档中有且仅有1个根标签
6.XML文档严格区分大小写
7.在XML中允许标签嵌套,但是不允许交叉嵌套
DOM树
XML 的各个组成部分都需要使用一个类型来描述:
-
XML 文件:把 XML 文档加载到内存中,使用 Document 对象来描述整个文档.
-
标签/元素:所有的标签,使用 Element 对象来描述.
-
属性:标签的属性,使用 Attribute 来描述.
-
文本:文本内容(文本/空格·车)使用 Text 来描述.
而这种把 XML 文档加载到内存之后,形成一个一个的对象,这种操作我们称为 DOM 解析。
DOM简介
DOM: 把文档中的成员描述成一个个对象.
特点: 在加载的时候,一次性把整个XML文档加载进内存,在内存中形成一颗树(Document对象)/DOM树.
后面使用代码操作的都是Document对象,和文档无关,如需要关联,需要进行同步操作
缺点: 若 XML 文件过大,可能造成内存溢出. 操作 XML 的增删改查(CRUD)的时候很简单,但是性能比较低 下.
Document获取
XML 被程序读到内存中会形成一个Document对象,所以要解析 XML ,首先得先获取到 Document 对象
获取文档 Document 对象的步骤
-
声明文件 xml 文件 File file = new File(path);
-
通过 DocumentBuilderFactory 的 newInstance 方法获取本身的对象 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-
通过 DocumentBuilderFactory 对象去获取 DocumentBuilder 对象 DocumentBuilder builder = factory.newDocumentBuilder();
-
通过 DocumentBuilder 对象去解析获取 Document 对象 builder.parse(file);
从XML文件中获取信息
常用API: Document 对象: Element getDocumentElement(): 获取根节点. Element 对象: NodeList getElementsByTagName(String name):通过标签名获取标签列表. Node 对象: String getTextContent():获取节点的文本内容 void setTextContent(String content);设置 节点的文本内容(可强转为Element进行操作)
同步操作
Transformer : 同步转换器. transform(Source xmlSource, ResultoutputTarget):同步操作 Source : 源是内存中的 Document,所以使用 DOMSource(doc) 实现类 Result : 内容写到磁盘,使用流操作文件,所有使用 StreamResult(file) 实现类