`

DOM4J读取XML文件

 
阅读更多
1.Document对象相关
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));

2.节点相关
(1) 获取文档根节点
Element rootElm = document.getRootElement();
(2) 获取某节点的单个子节点
Element memberElm = root.element("member");//member是节点名
(3) 取得节点的文字
String text = memberElm.getText();
(4) 取得某节点下名为"member"的所有子节点并进行遍历.
List nodes = rootElm.elements("member");//获取到名称为member的节点集合,member的子节点需要用elements函数获取
for(Iterator it = nodes.iterator(); it.hasNext();){
  Element elm = (Element)it.next();
  //...
}
(5) 对某节点下的所有子节点进行遍历
for(Iterator it = root.elementIterator();it.hasNext()){
  Element element = (Element)it.next();
 //...
}

(6) 在某节点下添加子节点
Element ageElm = newMemberElm.addElement("age");

(7) 设置节点文字
ageElm.setText("29");

(8)删除某节点
parentElm.remove(childElm);//childElm是待删除的节点
(9)添加一个CDATA节点
Element contentElm = infoElm.addElement("content");
contentElm.addCDATA(diary.getContent());
contentElm.getText(); //获取节点的CDATA值与获取节点的值是同一个
contentElm.clearContent(); //清除节点的内容,CDATA亦可。


3. 属性相关
(1) 取得某节点下的某属性
Element root = document.getRootElement();
Atrribute attribute = root.attribute("size");//属性名为size

(2) 取得属性的文字
String text = attribute.getText();

(3) 遍历某节点的所有属性
Element root = document.getRootElement();
for(Iterator it = root.attributeIterator(); it.hasNext();){
  Attribute attribute = (Attribute)it.next();
  String text = attribute.getText();
  System.out.println(text);
}

(4) 设置某节点的属性和文字
newMemberEml.addAtrribute("name","sitinspring");
(5) 设置属性的文字
Attribute attribute = root.attribute("name");
attribute.setText("sitinspring");

4.采用XPATH获取节点元素

由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便,结合XPATH就可以直接获取到某个元素
 
使用dom4j支持xpath的操作的几种主要形式
第一种形式
    /AAA/DDD/BBB: 表示一层一层的,AAA下面 DDD下面的BBB
第二种形式
    //BBB: 表示和这个名称相同,表示只要名称是BBB,都得到
第三种形式
    "/*": 所有元素
第四种形式
    BBB[1]: 表示第一个BBB元素
    BBB[last()]:表示最后一个BBB元素
第五种形式
    //BBB[@id]: 表示只要BBB元素上面有id属性,都得到
第六种形式
    //BBB[@id='b1'] 表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1
 
使用dom4j支持xpath具体操作
默认的情况下,dom4j不支持xpath,如果想要在dom4j里面是有xpath,第一步需要,引入支持xpath的jar包,如下:
在dom4j里面提供了两个方法,用来支持xpath
selectNodes("xpath表达式"),获取多个节点
selectSingleNode("xpath表达式"),获取一个节点

注意XPATH获取的是NODE,NODE与ELEMENT之间可以相互转换.

示例1
XML内容

<?xml version="1.0" encoding="gb2312"?>
<students>
    <student age="25"><!--如果没有age属性,默认的为20-->
        <name>崔卫兵</name>
        <college>PC学院</college>
        <telephone>62354666</telephone>
        <notes>男,1982年生,硕士,现就读于北京邮电大学</notes>
    </student>
    <student>
        <name>张洪泽</name>
        <college leader="leader">PC学院</college><!--如果没有leader属性,默认的为leader-->
        <telephone>62358888</telephone>
        <notes>男,1987年生,硕士,现就读于中国农业大学</notes>
    </student>
</students>

读取程序
Dom4jReadExmple

public class Dom4jReadExmple {
	/**
	 * 遍历整个XML文件,获取所有节点的值与其属性的值,并放入HashMap中
	 * 
	 * @param filename
	 *            String 待遍历的XML文件(相对路径或者绝对路径)
	 * @param hm
	 *            HashMap 存放遍历结果
	 */
	public void iterateWholeXML(String filename, List<HashMap<String, String>> hm) {
		SAXReader saxReader = new SAXReader();
		try {
			File f = new File(filename);
			Document document = saxReader.read(f);
			Element root = document.getRootElement();
			// 遍历根结点(students)的所有孩子节点(肯定是student节点)
			for (Iterator iter = root.elementIterator(); iter.hasNext();) {
				HashMap<String,String> stuHM = new HashMap<String,String>();
				Element element = (Element) iter.next();
				// 获取student节点的age属性的值
				Attribute ageAttr = element.attribute("age");
				if (ageAttr != null) {
					String age = ageAttr.getValue();
					if (age != null && !age.equals("")) {
						stuHM.put(element.getName() + "-" + ageAttr.getName(), age);
					} else {
						stuHM.put(element.getName() + "-" + ageAttr.getName(), "20");
					}
				} else {
					stuHM.put(element.getName() + "-age", "20");
				}
				// 遍历student结点的所有孩子节点(即name,college,telphone,notes),并处理
				for (Iterator iterInner = element.elementIterator(); iterInner.hasNext();) {
					Element elementInner = (Element) iterInner.next();
					if (elementInner.getName().equals("college")) {
						stuHM.put(elementInner.getName(), elementInner.getText());
						// 获取college节点的leader属性的值
						Attribute leaderAttr = elementInner.attribute("leader");
						if (leaderAttr != null) {
							String leader = leaderAttr.getValue();
							if (leader != null && !leader.equals("")) {
								stuHM.put(elementInner.getName() + "-" + leaderAttr.getName(), leader);
							} else {
								stuHM.put(elementInner.getName() + "-" + leaderAttr.getName(), "leader");
							}
						} else {
							stuHM.put(elementInner.getName() + "-leader", "leader");
						}
					} else {
						stuHM.put(elementInner.getName(), elementInner.getText());
					}
				}
				hm.add(stuHM);
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
}

//读取代码
TestDom4jReadExmple

public class TestDom4jReadExmple {
  public static void main(String[] args) {
       try{  
               //获取解析完后的解析信息  
               List<HashMap<String,String>> hashMap;  
               Dom4jReadExmple drb=new Dom4jReadExmple();  
               //遍历整个XML文件  
               hashMap = new ArrayList<HashMap<String,String>>();  
               String n =  System.getProperty("user.dir");//获取当前工程真实路径  
               //studentInfo.xml保存学生信息,放在src目录下  
               drb.iterateWholeXML(n+"\\src\\studentInfo.xml", hashMap);  
               for(HashMap stuHM:hashMap){
                   System.out.print(stuHM.get("name")+"\t");  
                   System.out.print(stuHM.get("student-age")+"\t");  
                   System.out.print(stuHM.get("college")+"\t");  
                   System.out.print(stuHM.get("college-leader")+"\t");  
                   System.out.print(stuHM.get("telephone")+"\t");  
                   System.out.println(stuHM.get("notes")+"\t");  
              }  
       }catch(Exception ex){  
         ex.printStackTrace();  
       }  
     }  
  }

示例2
采用XPATH读取
<?xml version="1.0" encoding="UTF-8"?>
<class> 
  <student> 
    <name>张三</name>  
    <sid>111111</sid> 
  </student>  
  <student id="stu1"> 
    <name>李四</name>  
    <sid>222222</sid> 
  </student> 
</class>

import java.util.List;
import org.dom4j.Document;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class Dom4jXpath {

    public static void main(String[] args) throws Exception {
        select();//查询所有name的值
        //select2();//查询id=stu1的学生的name的值
    }
    //查询所有name的值
    private static void select() throws Exception {
        SAXReader saxReader=new SAXReader();
        Document document=saxReader.read("src/1.xml");
        List<Node>list=document.selectNodes("//name");
        for(int i=0;i<list.size();i++)
            System.out.println(list.get(i).getText());
    }
    //查询id=stu1的学生的name的值
    private static void select2() throws Exception {
        SAXReader saxReader=new SAXReader();
        Document document=saxReader.read("src/1.xml");
        Node node=document.selectSingleNode("//student[@id='stu1']/name");
        System.out.println(node.getText());
    }
}

 

分享到:
评论

相关推荐

    dom4j读写xml文档实例

    要使用DOM4J读取XML文档,首先需要创建一个`SAXReader`对象,然后调用`read`方法传入XML文件路径。这将返回一个`Document`对象,我们可以从中获取所有元素信息。 ```java File file = new File("path_to_xml_file")...

    读写超大类xml文件,使用dom4j读写xml文件的工具类

    基于dom4j的读写xml文件的工具包。封装了dom4j操作xml文档的常和方法。 支持两种读写方法。1:针对小文件的读取整个文档,2:针对大文件的,逐行读取。读到几百M文件毫无压力。

    dom4j读写xml文件

    在本文中,我们将深入探讨DOM4J如何实现XML文件的读取和写入,并通过一个实际的`analysisXml`示例来展示其工作原理。 首先,我们需要理解XML的基本概念。XML(eXtensible Markup Language)是一种标记语言,用于...

    详细介绍使用Dom4j读取xml文件的方法

    ### 使用Dom4j读取XML文件的方法详解 #### 一、引言 在Java开发过程中,经常需要处理各种格式的数据文件,其中XML(可扩展标记语言)作为一种标准的数据交换格式被广泛使用。为了高效地解析和操作XML文档,开发者...

    java中dom4j读写XML

    Java中的DOM4J库是一个非常流行的、开源的Java XML API,它提供了强大的XML处理功能,包括XML的读取、创建、修改以及写入。DOM4J是基于DOM模型的,但相比标准的Java DOM,它提供了更加简洁和高效的API,使得开发者在...

    dom4j_XML.rar_DOM4J_dom4j xml java_java xml_读写xml

    6. **示例代码**:压缩包中的“dom4j读写xml文件.htm”可能包含了具体的代码示例,演示了如何使用DOM4J读取和写入XML文件。通常,这些示例会包括打开XML文件、获取根元素、遍历元素、修改元素内容、以及保存修改后的...

    dom4j解析xml文件代码示例

    在本示例中,我们将深入探讨如何使用DOM4J解析XML文件,以`CacheInit.java`作为我们的核心代码示例,并参考`emailTemplateConfig.xml`作为实际操作的对象。 首先,让我们了解XML(eXtensible Markup Language)。...

    使用dom4j读写XML文档

    ### 使用dom4j读写XML文档的关键知识点 #### 一、简介与安装 - **DOM4J** 是一款用于处理XML文档的Java库,它提供了简单且强大的API来解析、创建、修改XML文档。 - 官方网站:[http://www.dom4j.org/]...

    dom4j解析xml详解

    - **配置文件解析**: 许多应用使用XML作为配置文件的格式,DOM4J可以方便地读取和更新这些配置信息。 - **Web服务**: 在SOAP等协议中,XML是常用的数据传输格式,DOM4J能够帮助构建和解析这些XML消息。 - **文档生成...

    dom4j 解析(读取) xml 节点数据

    接下来,我们将创建一个`SAXReader`实例,它是DOM4J中的解析器,用于读取XML文件: ```java SAXReader reader = new SAXReader(); ``` 然后,使用`reader`读取XML文件并获取`Document`对象,`Document`代表整个XML...

    DOM4J 读取xml字符串

    **DOM4J 读取XML字符串** DOM4J 是一个非常强大的 Java XML API,它提供了丰富的功能,使得处理 XML 文件变得更加简单。DOM4J 的设计理念是简洁、灵活且高性能,它支持 SAX 和 DOM 解析,并提供了面向对象的接口。...

    Dom4J生成XML的完整方法希望大家能用到

    本文将深入探讨如何使用Dom4J库来创建XML文档,包括初始化文档、添加元素、设置属性、插入文本以及最终保存文档至文件系统。 #### 一、Dom4J简介 Dom4J(Document Object Model for Java)是一款开源的、轻量级的...

    java中用dom4j读取xml

    本文将深入探讨如何使用DOM4J库来读取XML文件。 首先,让我们理解DOM4J的基本概念。DOM4J是基于DOM模型的,DOM(Document Object Model)是一种标准的API,用于解析XML文档并将其表示为一棵由节点组成的树形结构。...

    使用dom4j读取xml四种方法

    本文将详细介绍使用dom4j读取XML文件的四种常见方法,并通过示例代码帮助读者更好地理解和掌握这些技术。 #### 方法一:使用`SAXReader`与`elementIterator` **方法原理**: 此方法首先利用`SAXReader`读取XML文档...

    dom4j解析xml

    以下是一个简单的DOM4J代码示例,展示如何使用DOM4J删除XML文档中的一个节点: ```java import java.io.FileOutputStream; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j....

    使用DOM4J对XML文件操作-添加、修改、删除、获取元素节点

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了灵活且高效的API,使得XML的解析、创建、修改和查询变得简单。在本教程中,我们将深入探讨如何使用DOM4J来执行基本的XML操作,包括添加元素、修改元素、删除...

Global site tag (gtag.js) - Google Analytics