使用Dom4j创建一个XML文件

以创建下面样式的xml为例

<?xml version="1.0" encoding="UTF-8"?>

<users>

  <user name="tom">26.5</user>

  <user name="jack" id="0001">126.5</user>

  <user name="ody">95.5</user>

  <school name="cslg" id="01">常熟理工学院</school>

</users>

先来看看dom4j提供的官方api中创建文档的代码

org.dom4j.DocumentHelper类


org.dom4j.DocumentHelper类中有createDocument,返回一个Document类对象

这个方法有两个重载方法。一个无参方法,一个有参方法,参数为Element类型。有参方法指定根标签名。


若你调用createDocument的无参方法创建Document对象后,需要先创建一个根标签.可使用Document对象的addElement方法。


addElement是Document是从父类接口Branch中继承而来的方法。


addElement()有三个重载的方法。返回的都是Element对象。你可根据需要自行选择。String  name指定标签名


若你调用的是createDocument的有参方法,在构建的时候就指定了根标签名,就可省去上面的一步操作。

 

创建好根标签之后,就可以在根标签下面添加子标签了。(设置根标签的时候返回的是一个Element对象)


可见接口Element也是继承了接口Branch,所以它也会有addElement()方法,可调用这个方法为指定标签添加子标签。(哪个标签的对象调用了这个方法,就是在哪个标签下面添加子标签)

 

给标签添加属性(addAttribute()).

调用addElement()方法给该标签添加属性。该方法有两个重载的方法。都是两个参数的。第一个参数指定标签名(key),第二个参数指定标签值(value)。该方法的返回值也是一个Element类型的对象。


因为addAttribute()方法的返回值仍然是一个Element对象,所以认可继续调用addAttribute()方法给该标签添加多个属性,例如,给<user>添加name和id属性:

element.addAttribute(“name”,”张三”).addAttribute(“id”,”01”);

 

就这样追加下去。当然也可以设置文本域内容了.

 

设置文本域(addText())。调用addText()方法。String text设置文本域的内容。该方法也是返回一个Element对象。


Dom4j的方便之处就是无论添加标签,标签属性,文本域结构都是返回的是Element对象。这样就给设置这些内容带来了很多方便之处。Dom4j的设计者真是别出心裁。

 

 

好了,上述便完成了创建一个简单的XML文档的操作。

 

创建好了之后,这些都扔停留在内存中。接下来,就是将内存中的XML写到本地的文件中了。Dom4j也提供了很好的api来写文件.


写文件要用到org.dom4j.io.XMLWriter这个类


使用OutputFormat类可以设置输出格式,及按照某种格式写出.


该类提供了两种写入方式:一种是漂亮的格式,即缩进,空格,换行良好。还有一种是紧凑的格式,即不换行,都是一行显示。

静态方法,可直接用类名调用.


创建好OutputFormat对象之后,在创建一个输出流,传入XMLWriter方法中。

调用XMLWriter的writer()方法,传入一个Document对象,运行之后即可完成写入



示例源代码:

public static void main(String[] args) {

    //使用DocumentHelper创建一个空的Document文本对象

Document document = DocumentHelper.createDocument();

//使用addElement方法添加一个根标签<user>

Element element = document.addElement("users");

//依次添加标签

element.addElement("user").addAttribute("name",          "tom").addText("26.5");

element.addElement("user").addAttribute("name", "jack").addAttribute("id", "0001").addText("126.5");

element.addElement("user").addAttribute("name", "tom").addText("29.5");

element.addElement("user").addAttribute("name", "terry").addText("66.5");

element.addElement("user").addAttribute("name", "marry").addText("29.5");

element.addElement("user").addAttribute("name", "ody").addText("95.5");

element.addElement("user").addAttribute("name", "tom").addText("46.5");

element.addElement("school").addAttribute("name", "cslg").addAttribute("id", "01").addText("常熟理工学院");

       // 格式良好的

OutputFormat format = OutputFormat.createPrettyPrint();

/*格式紧凑的

OutputFormat format = OutputFormat.createCompactFormat();*/

try {

XMLWriter writer = new XMLWriter(new FileOutputStream("src/test/day0905/Demo8.xml"), format);

           

    writer.write(document);

} catch (UnsupportedEncodingException | FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}



格式漂亮的输出结果:



格式紧凑的输出结果:




  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值