`
gaozengguang
  • 浏览: 62665 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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>

 

分享到:
评论

相关推荐

    dom4j解析XML(学习笔记)

    dom4j 被广泛的应用到xml解析上。这里给出部分网络资源

    Dom4j 解析Xml文档及 XPath查询 学习笔记

    NULL 博文链接:https://even2012.iteye.com/blog/1832068

    使用DOM解析XML和使用SAX解析XML

    java学习笔记——使用DOM解析XML和使用SAX解析XML

    XML DWR 解析dom 解析xml Ajax 杂乱的例子

    XML DWR 解析dom 解析xml Ajax 杂乱的例子 学习笔记

    dom4j 学习笔记

    dom4j是目前比较主流的对xml文件进行解析的API。

    详细的XML解析笔记

    本文档详细的给出了XML的介绍和XML解析的实例。包括DOM4J和SAX解析,节点的名和值得读取,属性的读取。生成XML文件等

    xml笔记及操作代码

    自己总结的一份xml学习笔记。内容包括xml文件的书写格式,约束、jaxp及dom4j对xml解析的代码。

    day023-xml解析笔记和代码.rar

    由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便, 结合XPATH就可以直接获取到某个元素 使用dom4j支持xpath的操作的几种主要形式 第一种形式 /a/b/c: 表示一层...

    树懒_day05.1_xml_DOM4J笔记

    移动开发的小白树懒正在努力的学习移动开发中的web体系中的xml解析,每天提高自己...

    xml介绍-笔记一

    学习xml时候的笔记以及心得 1)DOM(JAXP Crimson解析器) 2)SAX 3)JDOM http://www.jdom.org 4)DOM4J http://dom4j.sourceforge.net

    NekoHTML学习笔记.doc

    NekoHTML 学习笔记 NekoHTML 是一个简单的 HTML 扫描器和标签补偿器,使得程序能解析 HTML 文档并用标准的 XML 接口来访问其中的信息。这个解析器能投扫描 HTML 文件并“修正”许多作者(人或机器)在编写 HTML ...

    python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)

    xml.dom篇  DOM是Document Object Model的简称,XML 文档的高级树型表示。该模型并非只针对 Python,而是一种普通XML 模型。Python 的 DOM 包是基于 SAX 构建的,并且包括在 Python 2.0 的标准 XML 支持里。 一、...

    javascript学习基础笔记之DOM对象操作

    DOM是针对XML的基于树的API,它关注的不仅仅是解析XML代码,而是用一系列相互关联的对象来表示这些代码,而这些对象可以被修改,而且无需重新解析代码就能直接访问它们。由于DOM的使用上的简便,因此它成为了Web...

    JavaScript高级程序设计 XML、Ajax 学习笔记

    1.浏览器对XML DOM的支持 1.1 DOM2级核心 ①在DOM2级在document.implementation中引入了createDocument()方法(IE6~8不支持)。 可以创建一个空白XML。 var xmldom = document.implemention.createDocument...

    python爬虫学习笔记之pyquery模块基本用法详解

    本文实例讲述了python爬虫学习笔记之pyquery模块基本用法。分享给大家供大家参考,具体如下: 相关内容: pyquery的介绍 pyquery的使用 安装模块 导入模块 解析对象初始化 css选择器 在选定元素之后的元素再...

Global site tag (gtag.js) - Google Analytics