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

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

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

demo.xml内容:

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

demo.xml

java代码:

 1 package jmyang.dom4j;
 2
 3 /**
 4  * <p>Title:dom4j测试 </p>
 5  * <p>Description: 使用xpath读取节点内容、属性</p>
 6  * <p>Copyright: Copyright (c) 2012</p>
 7  * <p>Company: infosky.com.cn</p>
 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 }

XmlTest.java

运行结果:

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>

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

<dependency>
   <groupId>jaxen</groupId>
   <artifactId>jaxen</artifactId>
   <version>1.1.3-redhat-2</version>
  </dependency>

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

时间: 2024-10-05 20:50:59

java学习:使用dom4j读写xml文件的相关文章

java-关于使用dom4j处理xml文件报错

问题描述 关于使用dom4j处理xml文件报错 相同的代码,在JAVA工程里可以运行 然而我在android工程中调用的时候,却出现了问题!,程序在第一步URL url = new URL("http://api.map.baidu.com/telematics/v3/weather?location=%E9%95%87%E6%B1%9F&ak=4Xyifj6ty3WCLeLIgANbGR0N");好像就失败了,似乎无法打开....求大神告诉一下怎么解决 解决方案 实例037

dom4j写xml文件测试

dom4j写xml文件测试:     package com.yanek.demo.xml.test; import java.io.File;import java.io.FileWriter; import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.XMLWriter; public class DOM4j {  public static v

dom4j解析xml文件实例

dom4j解析xml文件实例     package com.yanek.demo.xml.test; import java.io.File;import java.util.List; import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader; public class Dm4jReadXml {  /**  * @pa

【dom4j xml】使用dom4j处理XML文件--测试过程遇到的问题

 首先 关于dom4j的API,有如下: 当然  其中的实体引用有以下: 测试使用环境: 使用Maven搭建web环境,pom.xml文件配置如下: 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/P

读写xml文件的2个小函数

xml|函数 #region 读写xml文件的2个小函数,2005 4 2 by hyc  public void SetXmlFileValue(string xmlPath,string AppKey,string AppValue)//写xmlPath是文件路径+文件名,AppKey是 Key Name,AppValue是Value  {   XmlDocument xDoc = new XmlDocument();   xDoc.Load(xmlPath);   XmlNode xNod

dom4j向xml文件中增加数据后缺少结尾标签

问题描述 dom4j向xml文件中增加数据后缺少结尾标签 public boolean insertStudent(Student student) { boolean flag=false; SAXReader saxReader=new SAXReader(); try { Document doc=saxReader.read(new File("dbstudent.xml")); Element rootEle=doc.getRootElement(); Element sno

使用DOM4J生成XML文件的换行以及特殊字符问题

问题描述 使用DOM4J生成XML文件,节点内容如何换行,'n'不行 在输出的节点内容中,有"<" 字符,我希望保留,但是却转换成了转移字符 < ,如何能阻止这种转换? 解决方案 使用n是可以换行的,要输出<等字符用addCDATA方法,代码如下public static void main(String[] args) throws Exception { Document doc = DocumentFactory.getInstance().createDocu

java-intellj中dom4j读取xml文件提示找不到文件

问题描述 intellj中dom4j读取xml文件提示找不到文件 还发现个问题intellj即使能读取到文件 按住ctrl点击也是无法进入文件的 解决方案 用绝对路径看看,你的相对路径可能不是src 解决方案二: 不加src试试.... 解决方案三: 路径写错了"/src/***.xml" 解决方案四: 还是用绝对路径吧.

编码-如何用java读取含有逻辑判断的xml文件?

问题描述 如何用java读取含有逻辑判断的xml文件? 各位大神好, 我现在想要用Java读取一个XML文件,内容如下.想实现给出relativeHumidity一个值,它可以通过读取XML自己判断是否在范围内.不如改如何实现呢?还是说xml只能机械表示内容,不能用作逻辑判断? <?xml version="1.0" encoding="UTF-8"?> 解决方案 Java读取xml文件JAVA读取XML文件java读取xml文件 解决方案二: 文件内容