DOM创建XML
* 1.首先创建Document来描述树
* 2.根据结构添加元素来组建树的结构
* 3.将树写入文件
1. 构建Document对象
使用DOM4J我们还可以通过自行构建Document对象,并组建树状结构来描述一个XML文档,并使用DOM4J将其写入一个文件。
那么在写XML文件时,做的第一件事自然就是构建Document对象。那么我们来看看如何构建一个Document对象。
构建Docuemnt对象,
我们可以使用DOM4J提供的一个类:DocumentHelper,其提供了一个静态方法:
static Document createDocument()
该方法会创建一个Docuemnt对象。
2. Document的addElement方法
当我们创建好Document后,我们就可以开始添加XML的根元素,通过前面的知识介绍我们知道,Element是用来描述XML中的一个元素的,所以我们要向Document中添加一个Element来表示根元素。
Document提供了这样的一个方法,可以方便的添加根元素:
Element addElement(String name)
该方法的作用是向Docuemnt中添加指定名字的根元素,这里需要注意的是,该方法只应当调用一次,否则会抛出文档已经存在根元素的异常。当根元素添加完毕后,该方法会将根元素所对应的Element对象返回,以便我们根据根元素来组织整个树。
3. Element的addElement方法
有了根元素后,我们如何向根元素中添加子元素呢?
Element类同样同了一个方法,用于向该元素中添加子元素:
Element addElement(String name)
该方法会向当前元素中添加给定名字的子元素,并将其对应的Element对象返回。
4. Element的addAttribute方法
除了向元素中添加子元素外,我们也经常会给当前元素添加属性。Element类提供了用于添加属性的方法:
Element addAttribute(String name,String value)
该方法会向当前元素中添加给定名字以及对应的值的属性。返回值依然为当前元素,这样做的目的在于我们连续添加元素时的代码复杂度可以减低,这个类似StringBuilder的append等方法的道理。
5. Element的addText方法
Element还提供了一个方法,可以向元素的文本节点添加文本信息。其方法定义为:
Element addText(String text)
6. XMLWriter输出XML文档
当我们构建好Docuement后,我们可以通过XMLWriter来输出。
/** * 将给定集合中所有员工信息以xml形式写入给定文件中 * * @param list * @param fileName * 使用Dom写xml的原则 组织好整棵树 */ private static void writeXmlToFile(List<Emp> list, String fileName) { try { /* * 1.首先创建Document来描述树 * 2.根据结构添加元素来组建树的结构 * 3.将树写入文件 */
//1 Document doc = DocumentHelper.createDocument(); // 2 /* * 用于添加根元素 返回值Element表示添加的这个根元素 * * Document的addElement方法只能调用一次 因为根只能有一个 */ Element root = doc.addElement("list"); // 循环list集合 for (Emp emp : list) { // 向根元素中添加子元素emp Element empEle = root.addElement("emp"); /* * Element的方法 addAttribute(String name,String value) * 用于向当前元素中追加属性 参数1:属性名 参数2:属性值 */ empEle.addAttribute("id", emp.getId() + ""); // 向emp中追加子元素name Element nameEle = empEle.addElement("name"); /* * Element 的方法addText(String str) 向当前元素中追加文本信息(前后标记中间) * <name>文本</name> */ nameEle.addText(emp.getName()); /* * 追加年龄元素 */ empEle.addElement("age").addText(emp.getAge() + ""); /* * 追加性别 */ empEle.addElement("gender").addText(emp.getGender() + ""); /* * 追加工资 */ empEle.addElement("salary").addText(emp.getSalary() + ""); // 3 FileOutputStream fos = new FileOutputStream(fileName); XMLWriter xmlWriter = new XMLWriter(fos); xmlWriter.write(doc); xmlWriter.close(); } } catch (Exception e) { e.printStackTrace(); } }