`
free_zhou
  • 浏览: 52116 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

java 使用 dom 和 dom4j 读写xml

    博客分类:
  • java
阅读更多
最近闲着没事,简单整理一下java读写xml的方法,以前也就是匆匆忙忙的使用,没有认真的思考过,本人菜鸟,希望各位老鸟指正!

本来想总结一下常用的读写xml的四个方法,为了写程序方便,定义了接口,事与愿违,有时间以后补上吧!
定义接口如下:
public interface ParserXmlInterface
{
	//创建xml
	public void createXml(String path);
	//解析xml
	public void parserXml(String fileName);
	//为dom4j xpath定义
	public void xpathDom4j(String path);
}


1.Dom读写xml方法
public class DomParaserXmlImpl
		implements ParserXmlInterface
{
	private Document document;

	// 实现接口生成xml方法
	public void createXml(String path)
	{
		// 初始化DOM
		this.initDocument();

		// 创建元素,并添加节点
		Element root = this.document.createElement("employess");
		this.document.appendChild(root);
		Element employee = this.document.createElement("employee");

		Element name = this.document.createElement("name");
		name.appendChild(this.document.createTextNode("gshzhou"));
		employee.appendChild(name);

		Element sex = this.document.createElement("sex");
		sex.appendChild(this.document.createTextNode("male"));
		employee.appendChild(sex);

		Element age = this.document.createElement("age");
		age.appendChild(this.document.createTextNode("25"));

		employee.appendChild(age);
		root.appendChild(employee);

		try
		{
			// 确定要创建的哪一个 Factory 实现被命名为
			TransformerFactory transFactory = TransformerFactory.newInstance();
			// 将原树转换为结果树。可以在转换之间保留参数和输出属性
			Transformer tf = transFactory.newTransformer();
			// 创建带有DOM节点的新输入源
			DOMSource domSource = new DOMSource(document);
			// 设置转换中实际的输出属性。
			tf.setOutputProperty(OutputKeys.INDENT, "yes");
			// java.io 向文本输出流打印对象的格式化表示形式。
			PrintWriter writer = new PrintWriter(new FileOutputStream(path));
			// 从字节流构造充当结果的持有者
			StreamResult result = new StreamResult(writer);
			// 讲xml转换为目标结果。
			tf.transform(domSource, result);

			System.out.println("xml生成成功");
		}
		catch (Exception e)
		{
			System.out.println("生成xml时异常:" + e.getMessage());
		}
	}

	// 实现接口解析xml
	public void parserXml(String fileName)
	{
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		try
		{
			DocumentBuilder db = factory.newDocumentBuilder();
			document = db.parse(fileName);
			NodeList employees = document.getChildNodes();
			for( int i = 0; i < employees.getLength(); i++)
			{
				Node employee = employees.item(i);
				NodeList employeeInfo = employee.getChildNodes();
				for( int j = 0; j < employeeInfo.getLength(); j++)
				{
					Node node = employeeInfo.item(j);
					NodeList employeeMate = node.getChildNodes();
					for( int k = 0; k < employeeMate.getLength(); k++)
					{
						System.out.println(employeeMate.item(k).getNodeName()
								+ ":" + employeeMate.item(k).getTextContent());
					}
				}
			}
			System.out.println("DOM 解析完毕");
		}
		catch (Exception e)
		{
			e.printStackTrace();
			System.out.println("解析xml异常:" + e.getMessage());
		}
	}

	// 初始化dom
	private void initDocument()
	{
		try
		{
			DocumentBuilderFactory factory = DocumentBuilderFactory
					.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			this.document = builder.newDocument();
		}
		catch (ParserConfigurationException e)
		{
			System.out.println("初始化DOM异常>");
		}
	}
	
	//方法是为Dom4j定义的接口,用xpath很方便 的找到节点的属性以及值。
	public void xpathDom4j(String path)
	{
		
	}
}


2. dom4j 读写xml以及xpath的简单使用。
public class Dom4jParaserXmlImpl
		implements ParserXmlInterface
{
	//dom4j生成xml
	public void createXml(String path)
	{
		Document document = DocumentHelper.createDocument();
		Element employees = document.addElement("employees");
		
		//第一个员工信息
		Element employee = employees.addElement("employee");
		employee.addAttribute("id", "gshzhou");
		
		Element name = employee.addElement("name");
		name.setText("gshzhou");
		Element sex = employee.addElement("sex");
		sex.setText("male");
		Element age = employee.addElement("age");
		age.setText("25");
		
		//第二个员工信息
		Element employee2 = employees.addElement("employee");
		employee2.addAttribute("id", "mingr");
		Element name2 = employee2.addElement("name");
		name2.setText("mingr");
		Element sex2 = employee2.addElement("sex");
		sex2.setText("male");
		Element age2 = employee2.addElement("age");
		age2.setText("30");
		
		try
		{
			Writer fileWrite = new FileWriter(path);
			XMLWriter xmlWrite = new XMLWriter(fileWrite);
			xmlWrite.write(document);
			xmlWrite.close();
			System.out.println("Dom4j生成xml成功。");
		}
		catch (IOException e)
		{
			System.out.println("Dom4j生成xml异常。" + e.getMessage());
		}
		
	}

	//dom4j解析xml
	public void parserXml(String fileName)
	{
		File inputXml = new File(fileName);
		SAXReader saxReader = new SAXReader();
		
		try
		{
			Document document = saxReader.read(inputXml);
			Element employees = document.getRootElement();
			for(Iterator i = employees.elementIterator(); i.hasNext(); )
			{
				Element employee = (Element)i.next();
				for(Iterator j = employee.elementIterator(); j.hasNext(); )
				{
					Element node = (Element)j.next();
					System.out.println(node.getName() + ":" + node.getText());
				}
			}
			System.out.println("Dom4j解析成功.");
		}
		catch (DocumentException e)
		{
			System.out.println("dom4j解析xml异常:" + e.getMessage());
		}
	}
	
	//Dom4j的一个亮点,使用xpath语法查找节点,快
	public void xpathDom4j(String path)
	{
		SAXReader saxReader = new SAXReader();
		try
		{
			Document document = saxReader.read(path);
			Node root = document.selectSingleNode("/employees");
			//Node root = document.getRootElement();
			//取employees下id为gshzhou的节点
			List list = root.selectNodes("employee[@id='gshzhou']");
			System.out.println(list.size());
			for(Object o : list)
			{
				Element e = (Element)o;
				//attributeValue是读取节点的属性值
				System.out.println("Node's attribute -> " + e.attributeValue("id"));
			}
			//取employees下所有的 employee节点
			List list1 = root.selectNodes("employee");
			//取employees节点下的employee节点下的name节点
			List list2 = root.selectNodes("employee[@id='gshzhou']/name");
			System.out.println("Node name -> " + ((Element)list2.get(0)).getName()); //输出子节点名字
			System.out.println("Node value -> "+((Element)list2.get(0)).getText());//输出子节点内容
		}
		catch (DocumentException e)
		{
			e.printStackTrace();
		}
	}
}



说明:Dom4j用到了 dom4j-1.6.1.jar 和 jaxen-1.1-beta-6.jar 都能在下载的dom4j包中找到。
分享到:
评论
2 楼 free_zhou 2010-06-02  
谢谢 这不是在你的指导下
1 楼 liwanfeng 2010-05-20  
可以!看来学习的还是很快的吗!恭喜恭喜啊!

相关推荐

    java中dom4j读写XML

    DOM4J是基于DOM模型的,但相比标准的Java DOM,它提供了更加简洁和高效的API,使得开发者在处理XML文档时更加方便。 XML(Extensible Markup Language)是一种用于标记数据的语言,广泛应用于网络数据交换、配置...

    Java使用sax、dom、dom4j解析xml文档

    Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...

    使用dom4j对xml的读写

    **使用DOM4J对XML的读写** DOM4J是一个非常强大的Java库,专门用于处理XML文档。它提供了丰富的API,使得XML的读取、创建、修改和解析变得简单易行。相较于JDOM,DOM4J确实提供了更多的功能,虽然在学习曲线方面...

    java 操作XML 采用(dom+dom4j)读写源码 lib包

    在Java中,处理XML有多种方式,其中DOM(Document Object Model)和DOM4J是两种常用的方法。下面将详细介绍这两种方法以及如何在Java中使用它们来读写XML。 1. DOM解析器: DOM是一种基于树型结构的XML文档模型,它...

    dom4j_XML.rar_DOM4J_dom4j xml java_java xml_读写xml

    5. **DOM4J与JAXB(Java Architecture for XML Binding)对比**:虽然两者都可以处理XML,但DOM4J更侧重于底层的XML操作,而JAXB则用于将Java对象和XML之间进行自动转换,更适用于对象和XML映射的需求。 6. **示例...

    dom4j读写xml文档实例

    总结,DOM4J是Java开发中处理XML文档的强大工具,它的易用性和灵活性使得XML操作变得简单。无论是读取、写入还是搜索XML,DOM4J都能提供高效的方法。在实际项目中,结合源码阅读和使用DOM4J工具,能够更深入地理解和...

    java中用dom4j读取xml

    通过学习和熟练使用DOM4J,开发者能够更高效地在Java项目中处理XML数据。不过要注意,DOM4J基于DOM模型,对于大型XML文件,内存消耗可能较大,因此在处理大文件时应考虑使用SAX或StAX等流式解析器。

    JAVA XML dom4j-1.6.1

    - DOM4J是一个基于Java的XML处理库,它扩展了Java的标准DOM API,提供了更简单和更直观的方式来处理XML文档。 - 它的核心思想是使用元素(Element)、属性(Attribute)和文本(Text)等对象来构建和操作XML文档,...

    Java用DOM4J读取XML

    ### Java使用DOM4J读取XML知识点解析 #### 一、概述 在Java开发中,处理XML文件是一项常见的任务。DOM4J是一个简单且功能强大的Java库,用于处理XML文档。它提供了类似于DOM的API,但更为轻量级且易于使用。本篇将...

    XSD使用dom4j校验XML

    本篇文章将深入探讨如何利用DOM4J库来实现XSD对XML文档的校验,以确保XML文件符合预先设定的数据结构规则。 首先,理解XSD的作用至关重要。XSD文件定义了XML文档的元素、属性、数据类型以及它们之间的关系。通过...

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    DOM4J的名字来源于“Document Object Model for Java”,它采用面向对象的设计思想,提供了对XML文档的全面支持。 DOM4J库的核心功能包括: 1. **解析XML**:DOM4J可以读取XML文件,将其转换为一个树形结构,即...

    java操作xml dom dom4j sax jdom

    在Java编程中,XML(可扩展标记语言)是一种被广泛用于数据存储和交换的格式。为了处理XML文档,Java提供了多种API,...在提供的"testxml"文件中,你可以尝试用这四种方式分别解析并操作XML,对比它们的使用和效果。

    dom4j.jar包,java解析xml dom4j.jar包

    **DOM4J库详解** DOM4J是一款强大的Java XML API,它提供了丰富的功能,使得在Java应用程序中处理XML文档变得简单而高效。...结合其轻量级的设计和对XPath的支持,DOM4J成为了Java开发者的首选XML库之一。

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

    DOM4J是一个强大的Java库,专门用于处理XML文档。它提供了简单而直观的方式来解析、创建、修改和操作XML数据。在本教程中,我们将深入探讨如何使用DOM4J解析(读取)XML节点数据,不受XML层级的限制。 首先,确保你...

    java 通过dom4j操作 xml

    Java中的DOM4J库是一个非常流行的XML处理工具,它提供了灵活且高效的API来解析、创建、修改和查询XML文档。DOM4J的名字来源于DOM(Document Object Model)和JDOM,它融合了两者的优势,提供了更丰富的功能和更好的...

    dom4j的Java工程

    总结来说,这个“dom4j的Java工程”是一个学习和实践DOM4J的绝佳资源。通过研究其中的代码,你可以掌握DOM4J处理XML的基本技巧,并理解如何将其应用到实际的Java项目中,以实现XML文件的高效管理和操作。无论是新手...

    dom4j解析xml文件的压缩包

    6. **Namespace支持**:DOM4J提供了对XML命名空间的全面支持,可以方便地处理包含命名空间的XML文档。 7. **DocumentType支持**:对于包含DOCTYPE声明的XML文档,DOM4J可以处理这些声明,并提供对应的DocumentType...

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

    ### Dom4J生成XML的完整方法详解 在Java开发领域,处理XML文档是常见的需求之一。Dom4J作为一款优秀的Java XML API,...掌握以上知识点,开发者即可熟练运用Dom4J生成复杂的XML文档,满足项目中对XML数据处理的需求。

    Java+flex使用dom4j读写xml

    2.Java方面,使用dom4j对xml进行操作,包括节点的读取,添加,修改,删除。 3.Flex方面,使用DataGrid呈现数据;使用RemoteObject构建和Java的通信;使用到了验证控件Validator;使用了CSS样式对Alert对话框进行了...

    java_dom解析xml xml java

    这种方式非常适合那些需要对XML文档进行多次访问或修改的应用场景。 #### 标题解释 标题“java_dom解析xml xml java”表明了本文档的主题是关于如何使用Java中的DOM技术来解析XML文件。 #### 描述分析 描述中提到...

Global site tag (gtag.js) - Google Analytics