dom4j解析xml学习笔记

      对于dom4j我是在今年暑假接触的.今天我想把xml文件解析成JAVA对象.

1、下载dom4j-1.6.1.jar包。

2、新建一工程web。在WebContent目录下创建users.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <users>
    <user name="ddd" mail="renyi@renyi.com" age="20"/>
    <user name="ddd" mail="renyi@renyi.com" age="20"/>
    <user name="ddd" mail="renyi@renyi.com" age="20"/>
    <user name="ddd" mail="renyi@renyi.com" age="20"/>
    <user name="ddd" mail="renyi@renyi.com" age="20"/>
  </users>
</root>

3、创建一个Bean——ElementNode.java

package com.test.learn_xml.dto;

import org.dom4j.Element;

public class ElementNode 
{
	private Element element;
	private String  id;//唯一标示符
	private String  parentId;//父节点ID
	public Element getElement() {
		return element;
	}
	public void setElement(Element element) {
		this.element = element;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getParentId() {
		return parentId;
	}
	public void setParentId(String parentId) {
		this.parentId = parentId;
	}
}

 

4、创建一个class——main.java

package com.inspur.learn_xml.action;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import com.test.learn_xml.dto.ElementNode;

public class do4jMain {

	/**
	 * @param args
	 */
	static int num = 0;
	static List<ElementNode> elementNodes = new ArrayList<ElementNode>();
	public static void main(String[] args) 
	{
		String fileUrl = "WebContent/xml/users.xml";
		readModels(fileUrl);
		showElements();
		fileUrl = "WebContent/xml/test.xml";
		createXmlDoc(fileUrl);
	}
	public static void readModels(String fileUrl) 
	{
		SAXReader saxReader = new SAXReader();
		try
		{
			Document document = saxReader.read(new File(fileUrl));//读取XML文件
			Element root = document.getRootElement();//得到根节点
			
			ElementNode elementNode = new ElementNode();
			
			elementNode.setElement(root);
			elementNode.setId("0");
			elementNode.setParentId("");
			
			elementNodes.add(elementNode);//把根节点加入到容器中去。
			num++;
			
			for(int i = 0;i < elementNodes.size();i++)
			{
				List<Element> elements = new ArrayList<Element>();
				elements = elementNodes.get(i).getElement().elements();//得到第i个节点的所有子节点
				for(int j = 0;j < elements.size();j++)
				{
					ElementNode node = new ElementNode();
					node.setParentId(String.valueOf(i));
					node.setElement(elements.get(j));
					node.setId(String.valueOf(num));
					elementNodes.add(node);
					num++;
				}
			}
			
		}catch (Exception e) 
		{
			e.printStackTrace();
		}
	}
	public static String createXmlDoc(String fileUrl) 
	{
		Document document = DocumentHelper.createDocument();
		document.setXMLEncoding("UTF-8");
		try
		{
			Element root = document.addElement("root") ;//创建根节点
			System.out.println("即将生成新的文件");
			elementNodes.get(0).setElement(root);
			int i = 0;
			int childNums = 0;
			while(i < elementNodes.size())
			{
				childNums = elementNodes.size();
				for(int j = i+1; j < childNums; j++)
				{
					if(elementNodes.get(i).getId().equals(elementNodes.get(j).getParentId()))
					{
						List<Attribute> attributes = new ArrayList<Attribute>();
						attributes = elementNodes.get(j).getElement().attributes();
						Element element = elementNodes.get(i).getElement().addElement(elementNodes.get(j).getElement().getName());
						element.setText(elementNodes.get(j).getElement().getText());
						element.setAttributes(attributes);
						elementNodes.get(j).setElement(element);
					}
				}
				i++;
			}
			try
			{
				OutputFormat format = OutputFormat.createPrettyPrint();
				XMLWriter output = new XMLWriter(new FileOutputStream( new File(fileUrl) ), format);
			    output.write( document );
			    output.close();
			    System.out.println("文件已经生成,"+fileUrl);
			}
			catch(IOException e)
			{
				System.out.println(e.getMessage());
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		finally
		{
			return fileUrl;
		}
	}
}

 

5、结果:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <users>
    <user name="ddd" mail="renyi@renyi.com" age="20"/>
    <user name="ddd" mail="renyi@renyi.com" age="20"/>
    <user name="ddd" mail="renyi@renyi.com" age="20"/>
    <user name="ddd" mail="renyi@renyi.com" age="20"/>
    <user name="ddd" mail="renyi@renyi.com" age="20"/>
  </users>
</root>

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值