java学习:使用dom4j读写xml文件(转)

上一篇 / 下一篇  2013-07-18 17:59:12 / 个人分类:Java学习

地址: http://www.cnblogs.com/yjmyzz/archive/2012/11/11/2765312.html

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

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

demo.xml内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xmlversion="1.0"encoding="UTF-8"?>
<address-list>
  <cardname="yangjm"id="1">
    <sex>男</sex>
    <address><![CDATA[中国上海外滩No.01]]>   </address>
    <telephone>13916732212</telephone>
  </card>
  <cardname="zhangsan"id="2">
    <sex>女</sex>
    <address>
      <itemtype="家庭地址"><![CDATA[中国.北京.东直门外大街]]>     </item>
      <itemtype="单位地址"><![CDATA[中国.上海.田林路888号]]>     </item>
    </address>
    <telephone>010-123123</telephone>
  </card>
</address-list>

 

java代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
packagejmyang.dom4j;
 
/**
 * <p>Title:dom4j测试 </p>
 * <p>Description: 使用xpath读取节点内容、属性</p>
 * <p>Copyright: Copyright (c) 2012</p>
 * <p>Company: infosky.com.cn</p>
 * @author:yjmyzz@126.com 菩提树下的杨过
 * @version 1.0
 */
 
importjava.util.*;
importjava.io.*;
importorg.dom4j.*;
importorg.dom4j.io.*;
 
 
publicclassXmlTest {
 
 
    publicstaticvoidTest() {
        String fileName = System.getProperty("user.dir") +"\\demo.xml";//当前路径下的demo.xml
 
        try{
            SAXReader reader =newSAXReader();
            Document doc = reader.read(fileName);//加载xml文件
 
            List peoples = doc.selectNodes("//*[@name]"); //选择所有具有name属性的节点(即demo.xml中的所有card节点)
            for(Iterator iter = peoples.iterator(); iter.hasNext(); ) {
                Element card = (Element) iter.next();
                //System.out.println(node.asXML());
                //System.out.println("---------------------------------------");
                //System.out.println(node.attributeCount());
                List attrList = card.attributes();
                //输出每个card的所有属性
                for(Iterator attr = attrList.iterator(); attr.hasNext(); ) {
                    Attribute a = (Attribute) attr.next();
                    System.out.println(a.getName() +"="+ a.getValue());
 
                }
                System.out.println(
                        "----------------------------------------------------");
            }
 
            Element zhangsan = (Element) doc.selectSingleNode("//card[@id='2']"); //查找“id属性”=2的card元素
            System.out.println("张三的名称:"+ zhangsan.attribute("name").getValue());//输出zhangsan的name属性
 
            Node addrFamily = zhangsan.selectSingleNode("./address/item[2]");//选择zhangsan元素下的address节点下的第2个item子节点
            System.out.println("张三的单位地址:"+ addrFamily.getStringValue());//输出cdata内容
 
            System.out.println(
                    "----------------------------------------------------");
            //为zhangsan下增加二个节点
            zhangsan.addElement("email").addAttribute("type",
                    "工作").addText("work@some-domain.com");
            zhangsan.addElement("email").addAttribute("type",
                    "私人").addCDATA("private@some-domain.com");//设置CDATA内容
 
            System.out.println(zhangsan.asXML());//打印zhangsan节点的xml内容(调试用)
            System.out.println(
                    "----------------------------------------------------");
 
            //将上述改动保存到文件demo2.xml
            FileWriter fileWriter =newFileWriter(System.getProperty(
                    "user.dir") +"\\demo2.xml");
 
            OutputFormat format = OutputFormat.createPrettyPrint();//设置美观的缩进格式,便于阅读
            //format = OutputFormat.createCompactFormat();//设置紧凑格式(消除多余空格),便于下载
            XMLWriter writer =newXMLWriter(System.out, format);
            writer.setWriter(fileWriter);
            writer.write(doc);
            writer.close();
 
        }catch(Exception e) {
            e.printStackTrace();
        }
 
    }
}

 jBuilder下的运行结果:

name=yangjm
id=1
----------------------------------------------------
name=zhangsan
id=2
----------------------------------------------------
张三的名称:zhangsan
张三的单位地址:中国.上海.田林路888号     
----------------------------------------------------
<card name="zhangsan" id="2">
    <sex>女</sex>
    <address>
      <item type="家庭地址"><![CDATA[中国.北京.东直门外大街]]>      </item>
      <item type="单位地址"><![CDATA[中国.上海.田林路888号]]>      </item>
    </address>
    <telephone>010-123123</telephone>
  <email type="工作">work@some-domain.com</email><email type="私人"><![CDATA[private@some-domain.com]]></email>< /card>
----------------------------------------------------

保存后的demo2.xml

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

<address-list>
  <card name="yangjm" id="1">
    <sex>男</sex> 
    <address><![CDATA[中国上海外滩No.01]]> </address> 
    <telephone>13916732212</telephone>
  </card> 
  <card name="zhangsan" id="2">
    <sex>女</sex> 
    <address>
      <item type="家庭地址"><![CDATA[中国.北京.东直门外大街]]> </item> 
      <item type="单位地址"><![CDATA[中国.上海.田林路888号]]> </item>
    </address> 
    <telephone>010-123123</telephone>  
    <email type="工作">work@some-domain.com</email>
    <email type="私人"><![CDATA[private@some-domain.com]]></email>
  </card>
</address-list>


TAG:

 

评分:0

我来说两句

Open Toolbar