Dom4j解析XML

dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,它的性能超过sun公司官方的dom技术,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。

Jar包:dom4j-2.0.0-RC1.jar、jaxen-1.1-beta-6.jar(用于XPath)

代码示例


import java.io.File;
import java.io.FileWriter;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

/**
 * Dom4j使用示例
 * 创建,修改,删除,解析XML文档
 * @author xiayunan
 *
 */
public class DOM4JDemo {
	/**
	 * 创建XML文件
	 * @throws Exception
	 */
	@Test
	public  void createXML() throws Exception{
		 Document document = DocumentHelper.createDocument();
         Element root = document.addElement("hibernate-mapping");
         Element classElement =
        		 root.addElement("class")
        		 	 .addAttribute("name","com.trs.User")
                     .addAttribute("table","wcmuser");
         classElement.addElement("property")
	         		 .addAttribute("name","username")
	         		 .addText("admin");
         classElement.addElement("property")
	         		 .addAttribute("name","password")
	         		 .addText("123456");
         
         OutputFormat format = OutputFormat.createPrettyPrint();//创建更漂亮的格式
         // 指定文件
         XMLWriter writer = new XMLWriter(
             new FileWriter("User.hbm.xml"),format
         );
         writer.write( document );
         writer.close();
	}
	/**
	 * 修改XML文档,改变password的值为12345678
	 * @throws Exception 
	 */
	@Test
	public void updateXML() throws Exception{
		SAXReader reader = new SAXReader();  
        Document document = reader.read(new File("User.hbm.xml")); 
        /*
         * 注:XPath使用//hibernate-mapping/class/property[@name='password']
         * 和直接使用//property[@name='password']效果是一样的,都是为了选取property元素
         * 中属性name值为password的节点的值,这里是为了方便显示层级结构
         */
        Node node = document.selectSingleNode( "//hibernate-mapping/class/property[@name='password']" );
        node.setText("12345678");
        OutputFormat format = OutputFormat.createPrettyPrint();//创建更漂亮的格式
        // 指定文件
        XMLWriter writer = new XMLWriter(
            new FileWriter("User.hbm.xml"),format
        );
        writer.write(document);
        writer.close();
        
	}
	
	/**
	 * 删除XML节点
	 * @throws Exception 
	 */
	@Test
	public void deleteXml() throws Exception{
		SAXReader reader = new SAXReader();  
        Document document = reader.read(new File("User.hbm.xml")); 
        Node node = document.selectSingleNode( "//property[@name='password']" );
        node.getParent().remove(node);
        OutputFormat format = OutputFormat.createPrettyPrint();//创建更漂亮的格式
        // 指定文件
        XMLWriter writer = new XMLWriter(
            new FileWriter("User.hbm.xml"),format
        );
        writer.write(document);
        writer.close();
        
	}
	
	/**
	 * 解析XML
	 * 获取class元素下所有的property元素的属性和值
	 * @throws Exception 
	 */
	@Test
	public void parseXml() throws Exception{
		SAXReader reader = new SAXReader();  
        Document document = reader.read(new File("User.hbm.xml")); 
        List<Node> nodes = document.selectNodes( "//hibernate-mapping/class/property" );
        for(Node node:nodes){
        	System.out.println(node.getName());//元素的名称
       	 	System.out.println(node.valueOf("@name"));//元素name属性的值
       	 	System.out.println(node.getText());//元素的文本值
        }
        
	}
}
生成的XML

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

<hibernate-mapping>
  <class name="com.trs.User" table="wcmuser">
    <property name="username">admin</property>
    <property name="password">123456</property>
  </class>
</hibernate-mapping>








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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值