java dom4j cdata_java开发使用dom4j读写xml文件

dom4j是一个优秀的开源项目,专用于xml文件的读写,而且支持强大的xpath.

下面的代码演示了对xml文件demo.xml的读写

demo.xml内容:<?xml  version="1.0" encoding="UTF-8" ?>

3   

4     男

5     

    

6     13916732212

7   

8   

9     女

10     

11             

12             

13     

14     010-123123

15   

16 

java代码:package jmyang.dom4j;

2

3 /**

4  * 

Title:dom4j测试 

5  * 

Description: 使用xpath读取节点内容、属性

6  * 

Copyright: Copyright (c) 2012

7  * 

Company: infosky.com.cn

8  * @author:yjmyzz@126.com 菩提树下的杨过

9  * @version 1.0

10  */

11

12 import java.util.*;

13 import java.io.*;

14 import org.dom4j.*;

15 import org.dom4j.io.*;

16

17

18 public class XmlTest {

19

20

21     public static void Test() {

22         String fileName = System.getProperty("user.dir") + "\\demo.xml"; //当前路径下的demo.xml

23

24         try {

25             SAXReader reader = new SAXReader();

26             Document doc = reader.read(fileName); //加载xml文件

27

28             List peoples = doc.selectNodes("//*[@name]"); //选择所有具有name属性的节点(即demo.xml中的所有card节点)

29             for (Iterator iter = peoples.iterator(); iter.hasNext(); ) {

30                 Element card = (Element) iter.next();

31                 //System.out.println(node.asXML());

32                 //System.out.println("---------------------------------------");

33                 //System.out.println(node.attributeCount());

34                 List attrList = card.attributes();

35                 //输出每个card的所有属性

36                 for (Iterator attr = attrList.iterator(); attr.hasNext(); ) {

37                     Attribute a = (Attribute) attr.next();

38                     System.out.println(a.getName() + "=" + a.getValue());

39

40                 }

41                 System.out.println(

42                         "----------------------------------------------------");

43             }

44

45             Element zhangsan = (Element) doc.selectSingleNode("//card[@id='2']"); //查找“id属性”=2的card元素

46             System.out.println("张三的名称:" + zhangsan.attribute("name").getValue()); //输出zhangsan的name属性

47

48             Node addrFamily = zhangsan.selectSingleNode("./address/item[2]"); //选择zhangsan元素下的address节点下的第2个item子节点

49             System.out.println("张三的单位地址:" + addrFamily.getStringValue()); //输出cdata内容

50

51             System.out.println(

52                     "----------------------------------------------------");

53             //为zhangsan下增加二个节点

54             zhangsan.addElement("email").addAttribute("type",

55                     "工作").addText("work@some-domain.com");

56             zhangsan.addElement("email").addAttribute("type",

57                     "私人").addCDATA("private@some-domain.com"); //设置CDATA内容

58

59             System.out.println(zhangsan.asXML()); //打印zhangsan节点的xml内容(调试用)

60             System.out.println(

61                     "----------------------------------------------------");

62

63             //将上述改动保存到文件demo2.xml

64             FileWriter fileWriter = new FileWriter(System.getProperty(

65                     "user.dir") + "\\demo2.xml");

66

67             OutputFormat format = OutputFormat.createPrettyPrint(); //设置美观的缩进格式,便于阅读

68             //format = OutputFormat.createCompactFormat();//设置紧凑格式(消除多余空格),便于下载

69             XMLWriter writer = new XMLWriter(System.out, format);

70             writer.setWriter(fileWriter);

71             writer.write(doc);

72             writer.close();

73

74         } catch (Exception e) {

75             e.printStackTrace();

76         }

77

78     }

79 }

运行结果:

name=yangjm

id=1

----------------------------------------------------

name=zhangsan

id=2

----------------------------------------------------

张三的名称:zhangsan

张三的单位地址:中国.上海.田林路888号

----------------------------------------------------

010-123123

work@some-domain.com

----------------------------------------------------

保存后的demo2.xml<?xml  version="1.0" encoding="UTF-8"?>

 

13916732212

010-123123

work@some-domain.com

最后注意一点:dom4j支持xpath语法,但该特性需要jaxen包的支持(编译期不需要,仅运行时需要),所以需要在项目中引入该包,如果是maven项目,要加入

jaxen

jaxen

1.1.3-redhat-2

否则运行时会提示"类找不到"之类的错误。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值