XML之dom4j

dom4j 是一套开源的 XML 解析工具,它更为简单易用。

读取并解析XML文件

SAXReader saxReader = new SAXReader();
Document document = saxReader.read(new File("students.xml"));

借助 SAXReader 类及其实例方法 read() 方法,可以读取一个XML文件。read方法所返回的 org.dom4j.Document 对象就“代表”着这个XML文档。

作为所有元素中最特殊的元素:根元素,有专门的方法从 Document 对象中获得根元素 getRootElement()

Element 对象的通用方法

.elements()
: 返回一个 List 对象,其中包含了本元素的所有子元素(不包括孙元素及后代)。

.getName()
: 返回本元素对象的标签名。

.attributes()
: 返回一个 List 对象,其中包含了本元素的所有属性对象。

.attributeValue("")
: 返回本元素对象指定属性的属性值。


Attribute 对象的通用方法

.getName()
: 返回本属性的属性名

.getValue()
: 返回本属性的属性值


Element 对象的特定方法

如果一个元素没有子元素(即其下只有文本节点),那么该元素就是一个“叶子”元素。

如果一个元素是叶子元素,那么它可以调用 .getText() 方法返回其下文本内容。


Element 子元素的迭代

循环遍历一个元素的子元素有两种方式:

  • 通过 .elements() 获得本元素的子元素集合,随后循环遍历集合。
  • 通过 .elementIterator() 获得一个子元素迭代器,随后通过迭代器依次获得子元素。

修改 XML 文件的内容

修改 XML 文件的内容的原理非常简单,找到并修改对应元素节点、属性节点和文本节点,再将代表 XML 文件的 Document 对象重新写回硬盘,即实现了 XML 文件的内容的修改工作。


通过 DocumentHelper 类的静态方法 createElement("") 可以创建一个 Element 对象。

逻辑上,一个 Element 对象只有“附着”在另一个Element之下作为其子元素,或者是作为一个 XML 文件的根元素,该 Element 元素才有存在的意义,该 Element 所代表的数据在“未来”才会被写入到 XML 文件中。


通过 DocumentHelper 类的静态方法 createAttribute 可以创建一个 Attribute 对象。

和 Element 对象一样,Attribute 对象必须“附着”于某个 Element 对象才有存在的意义。

即便是在创建时指明了本属性属于哪个元素,后续仍需要调用元素的 add() 方法,来再次指明为某元素添加属性。


通过 Element 对象的 addXXX() 方法可以实现向本对象新增属性、子元素、文本。

  • .addAttribute("属性名", "属性值"),为当前元素添加新的属性和值
  • .addElement("子元素标签名"),为当前子元素添加新的子元素,注意,此时子元素无任何内容。
  • .addText("文本内容"),为当前其中元素添加新的文本内容。

除此之外有 add() 方法也可实现新增属性、子元素 和 文本内容。add() 方法有多种重载形式。

  • 新增属性,需要传入新的 Attribute 对象;
  • 新增子元素,需要传入新的 Element 对象;
  • 新增文本,需要传入新的 String 对象。

元素对象的 .remove() 方法可以实现删除属性、子元素 和 文本内容。add() 方法有多种重载形式。

  • 新增属性,需要传入新的 Attribute 对象;
  • 新增子元素,需要传入新的 Element 对象;

保存 XML 文件

通过 FileWriter 对象指明将要写入的文件路径名,调用 Document 对象的 write() 方法可以将Document对象所代表的XML文件及其内容写入硬盘。

FileWriter out = new FileWriter( "foo.xml" );
document.write( out );

除此之外,Dom4j 还提供了 XMLWriter 类,通过将 FileWriter 包装成 XMLWriter 对象,可以在保存XML文件时,提供额外的格式控制功能。

XMLWriter writer = new XMLWriter(new FileWriter( "output.xml" ));
writer.write(document);
writer.close();

// “好看”的格式
OutputFormat format = OutputFormat.createPrettyPrint();
writer = new XMLWriter( System.out, format );
writer.write( document );

// 紧凑型格式
format = OutputFormat.createCompactFormat();
writer = new XMLWriter( System.out, format );
writer.write( document );

你可能感兴趣的:(XML之dom4j)