原文链接
Java进阶之"XML操作" https://zhuanlan.zhihu.com/p/30829960
详细代码参考(必看)
1.XML全称是"(扩展标记语言)"
是一种用来结构化文档和数据的通用且适应性强的格式,它不仅仅可以用于 WEB,而且可以被用于任何地方。说的明白一点就是:XML 被设计用来传输和存储数据的。
在java中,很多配置文件,都是xml文件,比如说spring,或者mybatis.
XML的学习和使用都很简单,我们先看它的语法.
1.1 所有 XML 元素都须有关闭标签
<p>有始有终</p>
1.2 XML 标签对大小写敏感
<Message>前后是不一样的,这就错了.</message>
1.3 XML 必须正确地嵌套
<b><i>同学,请注意插入顺序.</b></i>
1.4 XML 文档必须有根元素
XML 文档必须有一个元素是所有其他元素的父元素。该元素称为根元素。
<root>
<one>
<two>.....</two>
</one>
</root>
1.5 XML 的属性值须加引号
<datasource id="db_oracle">这一行有引号,正确.</datasource>
<datasource id=db_oracle>这一行没有引号,错误的.</datasource>
1.6 特殊字符的使用方式(又叫实体引用)
<message> 10 < 1000 </message> //这是错误的.
<message> 10 < 1000 </message> //这是正确的.
在 XML 中,有 5 个预定义的实体引用:
< < 小于
> > 大于
& & 和号
' ' 单引号
" " 引号
1.7 XML 中的注释
<!-- 这是注释 --> //与html的语法一样
1.8 CDATA段
格式:< ! [ CDATA [ 文本内容 ] ] >
特殊标签中的实体引用都被忽略,所有内容被当成一整块文本数据对待.适用于有多个特殊字符的情况.
语法看完了,我们看看用法.
2.xml的解析
xml的解析方式有多种,在Java中,我们只说两种最常用的方式.
2.1 DOM解析方式
DOM:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。DOM解析器在解析XML文档时,会把文档中的所有元素,按照其出现的层次关系,解析成一个个Node对象(节点)。其优缺点分别为:
优点:把xml文件在内存中构造树形结构,可以遍历和修改节点
缺点: 如果文件比较大,内存有压力,解析的时间会比较长
2.2 SAX解析方式
SAX(simple API for XML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析。 其优缺点分别为:
优点: 解析可以立即开始,速度快,没有内存压力
缺点: 不能对节点做修改
2.3 读取XML
Java中常用的操作xml的一个包是dom4j的包.
dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用的特点,同时它也是一个开放源代码的软件。使用dom4j来实现对XML文档的解析,详细过程如下:
2.3.1 使用dom4j需要导入dom4j对应的jar包。
2.3.2 创建SAXReader类的对象来实现读取XML文档,代码如下:
SAXReader reader = new SAXReader();
2.3.3 使用SAXReader类的read方法获取Document对象,Document 对象是一棵文档树的根,可为我们提供对文档数据的最初(或最顶层)的访问入口,代码如下:
Document doc = reader.read(new File("EmpList.xml"));
2.3.4 使用Document对象的getRootElement方法获取要解析的XML文档的根元素,该方法返回值类型为Element。Element 对象表示 XML文档中的元素。元素可包含属性、其它元素或文本。如果元素含有文本,则在文本节点中表示该文本,代码如下:
Element root = doc.getRootElement();
2.3.5 使用Element对象提供的方法继续解析XML文档,例如:其elements方法用来获取当前元素下的所有子元素,代码如下:
List<Element> elements = root.elements();
2.3.6 最后遍历list集合即可.
2.4 写一个XML文件.
2.4.1 使用DocumentHelper类的静态方法createDocument创建文档对象Document,代码如下所示:
Document doc = DocumentHelper.createDocument();
2.4.2 使用Document类的addElement方法,创建根节点<list>,代码如下所示:
// 添加根标记
Element root = doc.addElement("list");
2.4.3 添加子元素
// 向根元素中添加名为user的子元素
Element ele = root.addElement("user");
然后为one这个元素赋值
ele.addAttribute("id", 1);
ele.addElement("name").addText("小明");
2.4.4 :生成文件
// 写出
XMLWriter writer = new XMLWriter();
FileOutputStream fos = new FileOutputStream("emps.xml");
writer.setOutputStream(fos);
writer.write(doc);
writer.close();
至此.xml 读取与写出,阐述完毕.