`
hongbo.wu
  • 浏览: 93540 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

DOM4J XML解析和组合

 
阅读更多
package com.wuhongbo.common.util.xml;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
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.XMLWriter;

/**
 * xml写入器
 * 
 * @author wuhongbo
 * 
 */
public class XmlWrite
{
	private Document doc;
	private Element root;

	/**
	 * 构造xml写入器
	 * 
	 * @param xmlFile
	 *            文件路径
	 * @throws XmlException
	 */
	public XmlWrite(String rootNodeName) throws XmlException
	{
		try
		{
			doc = DocumentHelper.createDocument();
			root = DocumentHelper.createElement("response");
			doc.add(root);
		}
		catch (Exception e)
		{
			e.printStackTrace();
			
			throw new XmlException("xml创建失败:" + e.getMessage());
		}
	}

	/**
	 * 创建节点
	 * 
	 * @param nodeName
	 *            节点名称
	 * @param text
	 *            节点文本,为null时,无内容 如<name/>
	 * @return 返回节点
	 */
	public Node createNode(String nodeName, String text)
	{
		Element node = DocumentHelper.createElement(nodeName);
		node.setText(text);

		return node;
	}

	/**
	 * 增加子节点
	 * 
	 * @param rootNode
	 *            根节点
	 * @param nodeName
	 *            子节点名称
	 * @return 返回子节点
	 * @throws XmlException
	 */
	public Node addChildNode(Node rootNode, String nodeName)
			throws XmlException
	{
		if (rootNode == null)
		{
			throw new XmlException("rootNode is null");
		}

		Element element = (Element) rootNode;

		// 子节点
		Element node = DocumentHelper.createElement(nodeName);
		element.add(node);

		return node;
	}

	/**
	 * 增加子节点
	 * 
	 * @param rootNode
	 *            根节点
	 * @param nodeName
	 *            子节点名称
	 * @param text
	 *            内容
	 * @return 返回子节点
	 * @throws XmlException
	 * 
	 */
	public Node addChildNode(Node rootNode, String nodeName, String text)
			throws XmlException
	{
		Node node = this.addChildNode(rootNode, nodeName);
		node.setText(text);
		return node;
	}

	/**
	 * 增加子节点
	 * 
	 * @param rootNode
	 *            根节点
	 * @param node
	 *            子节点
	 * @return
	 * @throws XmlException
	 */
	public Node addChildNode(Node rootNode, Node node) throws XmlException
	{
		Element element = (Element) rootNode;
		element.add(node);

		return node;
	}

	/**
	 * 增加节点属性
	 * 
	 * @param rootNode
	 *            根节点
	 * @param nodes
	 *            子节点列表
	 * @throws XmlException
	 */
	public void addChildNodes(Node rootNode, List<Node> nodes)
			throws XmlException
	{
		Element element = (Element) rootNode;
		if (nodes != null)
		{
			for (Node node : nodes)
			{
				element.add(node);
			}
		}
	}

	/**
	 * 设置节点文本
	 * 
	 * @param node
	 *            节点
	 * @param text
	 *            文本内容
	 */
	public void setNodeAtt(Node node, String attName, String attValue)
	{
		if (node != null)
		{
			Element element = (Element) node;
			element.addAttribute(attName, attValue);
		}
	}
	
	/**
	 * 获取xml文档根节点
	 */
	public Node getRootNode()
	{	
		return doc.getRootElement();
	}

	/**
	 * 创建xml文件
	 * 
	 * @param targetFile
	 *            目录文件
	 * @throws XmlException
	 */
	public void createXmlFile(File targetFile) throws XmlException
	{
		try
		{
			Writer out = new FileWriter(targetFile);
			// 格式化输出,类型IE浏览一样
			OutputFormat format = OutputFormat.createPrettyPrint();
			// OutputFormat format = OutputFormat.createCompactFormat();
			format.setEncoding("UTF-8");

			// 创建写出对象
			XMLWriter writer = new XMLWriter(out, format);
			writer.write(doc);
			writer.close();
		}
		catch (Exception e)
		{
			throw new XmlException("xml文件生成失败");
		}
	}

	public static void main(String[] args) throws XmlException
	{
		XmlWrite write = new XmlWrite("response");
		
		Node root =write.getRootNode();
		write.setNodeAtt(root,"ver", "1.0");
	
		Node headNode = write.addChildNode(root, "head");
		
		Node bodyNode = write.addChildNode(root, "body");
		
		write.addChildNode(headNode, "status" ,"0");
		
		write.addChildNode(headNode, "message" ,"");
		
		
		write.addChildNode(bodyNode, "status","0");
		write.addChildNode(bodyNode, "message","");
		write.addChildNode(bodyNode, "issuccess","false");
		
		File targetFile =new File("c:/test2.xml");
		write.createXmlFile(targetFile);
		
		System.out.println("end");
	}

	public static void main2(String[] args) throws Exception
	{

		Document doc = DocumentHelper.createDocument();

		Element root = DocumentHelper.createElement("response");

		root.addAttribute("ver", "1.0");

		Element head = DocumentHelper.createElement("head");
		Node status = DocumentHelper.createElement("status");
		status.setText("1<abc>2</abc>");

		head.add(status);

		Element body = DocumentHelper.createElement("body");

		root.add(head);
		root.add(body);

		doc.add(root);

		System.out.println(doc.getText());

		// Writer out = new FileWriter("xml/emps.xml");
		// out.write(doc.getText());

		try
		{
			Writer out = new FileWriter("c:/test2.xml");
			// 格式化输出,类型IE浏览一样
			OutputFormat format = OutputFormat.createPrettyPrint();
			// OutputFormat format = OutputFormat.createCompactFormat();
			format.setEncoding("UTF-8");

			// 创建写出对象
			XMLWriter writer = new XMLWriter(out, format);
			writer.write(doc);
			writer.close();
		}
		catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("失败了。");
		}

		System.out.println("end");

	}
}

 

 

package com.wuhongbo.common.util.xml;

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

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

/**
 * xml读取器
 * 
 * @author wuhongbo
 * 
 */
public class XmlRead
{
	private SAXReader reader;
	private Document doc;

	/**
	 * 构造xml解析器
	 * 
	 * @param xmlFile
	 *            文件路径
	 * @throws XmlException
	 */
	public XmlRead(File xmlFile) throws XmlException
	{
		try
		{
			reader = new SAXReader();
			doc = reader.read(xmlFile);
		}
		catch (DocumentException e)
		{
			throw new XmlException("xml创建失败:" + e.getMessage());
		}
	}

	/**
	 * 构造xml解析器
	 * 
	 * @param xmlStr
	 *            xml内容
	 * @throws XmlException
	 */
	public XmlRead(String xmlStr) throws XmlException
	{
		try
		{
			doc = DocumentHelper.parseText(xmlStr);
		}
		catch (DocumentException e)
		{
			throw new XmlException("xml创建失败:" + e.getMessage());
		}
	}

	/**
	 * 获取根节点
	 * 
	 * @throws XmlException
	 */
	public Node getRootNode()
	{
		return doc.getRootElement();
	}

	/**
	 * 获取指定节点下的唯一节点
	 * 
	 * @param rootNode
	 *            指定根节点,不为空
	 * @param nodeName
	 *            获取节点的名称
	 * @return 返回节点,无则返回为空,有多个则返回第1个
	 * @throws XmlException
	 */
	public Node getNode(Node rootNode, String nodeName) throws XmlException
	{
		if (rootNode == null)
		{
			// throw new XmlException("rootNode is null");
			return null;
		}

		return rootNode.selectSingleNode(nodeName);
	}

	/**
	 * 获取指定节点下的节点
	 * 
	 * @param rootNode
	 *            指定根节点
	 * @param nodeName
	 *            获取节点的名称
	 * @return 返回节点,无则返回为空,有多个则返回第1个
	 * @throws XmlException
	 */
	public List<Node> getNodes(Node rootNode, String nodeName)
			throws XmlException
	{
		if (rootNode == null)
		{
			// throw new XmlException("rootNode is null");
			return new ArrayList<Node>();
		}

		List<Node> list = rootNode.selectNodes(nodeName);
		return list;
	}

	/**
	 * 获取节点的指定属性的值
	 * 
	 * @param node
	 *            指根节点,不为空
	 * @param attName
	 *            获取属性的名称
	 * @return 返回节点,无则返回为空
	 * @throws XmlException
	 */
	public String getNodeAtt(Node node, String attName) throws XmlException
	{
		if (node == null)
		{
			return null;
		}

		Element element = (Element) node;

		return element.attributeValue(attName);
	}

	/**
	 * 获取指定根节点下的唯一节点的文本
	 * 
	 * @param root
	 *            指定根节点,不为空
	 * @param nodeName
	 *            获取节点的名称
	 * @return 返回节点,无则返回为空,有多个则返回第1个
	 * @throws XmlException
	 */
	public String getNodeText(Node rootNode, String nodeName)
			throws XmlException
	{
		if (rootNode == null)
		{
			// throw new XmlException("rootNode is null");
			return null;
		}

		Node node = rootNode.selectSingleNode(nodeName);
		if (node != null)
		{
			return node.getStringValue();
		}

		return null;
	}

	/**
	 * 读取测试例子
	 * 
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception
	{

		String xmlStr = "";

		File xmlFile = new File("c:/test2.xml");
		XmlRead xmlRead = new XmlRead(xmlFile);

		Node rootNode = xmlRead.getRootNode();

		System.out.println(xmlRead.getNodeAtt(rootNode, "ver"));

		Node headNode = xmlRead.getNode(rootNode, "head");

		String status = xmlRead.getNodeText(headNode, "status");

		System.out.println("status:" + status);

		Node bodyNode = xmlRead.getNode(rootNode, "body");
		Node fileListNode = xmlRead.getNode(bodyNode, "filelist");
		List<Node> list = xmlRead.getNodes(fileListNode, "file");

		for (Node node : list)
		{
			System.out.println("----------------------");
			System.out.println(xmlRead.getNodeText(node, "id"));
			System.out.println(xmlRead.getNodeText(node, "name"));
		}

		System.out.println("end");

	}
}

 

分享到:
评论

相关推荐

    使用dom4j和jaxen解析xml

    总结起来,dom4j和jaxen的组合使用为Java开发者提供了强大的XML处理能力。dom4j负责解析、构建和修改XML文档,而jaxen则作为XPath查询工具,两者结合可以高效地处理复杂的XML操作。在实际项目中,掌握这两个库的使用...

    java dom4j 解析xml的例子,可用

    DOM4J这个名字来源于“Document Object Model”(DOM)和“Java”的组合,它扩展了DOM接口,同时引入了基于事件的处理方式,使得XML处理更为简便。 本例子的核心知识点包括: 1. **DOM4J解析XML**:DOM4J通过创建...

    Dom4j解析XML+使用简介

    **Dom4j解析XML+使用简介** Dom4j是一个非常流行的Java库,专门用于处理XML...在提供的两个PDF文件中,"Dom4j使用简介.pdf"和"Dom4j解析XML.pdf"应该包含了更详尽的示例和教程,帮助读者进一步掌握Dom4j的使用技巧。

    使用Dom4j解析复杂的XML文件

    在处理复杂的XML文件时,我们通常需要借助解析库,如Dom4j,来帮助我们提取和操作XML中的信息。Dom4j是一个灵活且功能强大的Java库,它提供了丰富的API来处理XML文档,包括读取、写入、修改和查询。 1. **Dom4j基本...

    dom4j解析XML的两个JAR包

    - Jaxen是一个独立于XML解析器的XPath实现,它允许在各种XML API(如DOM、DOM4J、JDOM等)之间进行XPath查询。 - Jaxen的核心在于其通用的XPath引擎,可以与多种XML对象模型协同工作,这样开发者无需关心底层的XML...

    dom4j 解析 大 文件

    总之,DOM4J和XPath的组合是处理大文件XML数据的有效工具。通过合理的设计和优化,可以应对大数据挑战,实现高效的数据解析和处理。在实际操作中,应根据具体需求调整策略,确保程序的性能和稳定性。

    java 解析xml所需要的dom4j包

    描述中提到的"java xml解析所需要的包",通常包括了DOM4J库和其他辅助库,如XStream。XStream是一个用于Java的XML序列化库,能够将Java对象直接转换为XML,反之亦然。这在需要将数据持久化到XML或者从XML中恢复数据...

    DOM4J jar包

    在XML解析方面,DOM4J提供了一些核心类,如`Document`、`Element`、`Attribute`和`Namespace`等。`Document`代表整个XML文档,`Element`表示XML中的元素节点,`Attribute`代表元素的属性,而`Namespace`则用于处理...

    dom4j和xpath的jar包

    总的来说,DOM4J和XPath是XML处理的强大组合,它们提供了一种简洁、高效的途径来操作XML文档。了解并熟练掌握这两个工具,对于任何涉及XML的Java开发工作都是至关重要的。通过学习和实践,开发者可以提升XML数据处理...

    dom4j-1.6.1.jar及其2.0.2、2.1.1三个版本的jar包

    DOM4J的名字来源于Document Object Model(DOM)和Java的组合,但它并不完全遵循W3C的DOM规范,而是采用了一种更面向Java的API设计。 在您提供的文件中,我们看到了DOM4J的三个不同版本:1.6.1、2.0.2和2.1.1。这些...

    dom4j-1.6.1.jar和ojdbc14_g.jar包

    1. XML解析:dom4j采用事件驱动和模型驱动的混合方式解析XML,使得处理大型XML文档时性能更优。它支持SAX和DOM两种解析模式,可以根据需求选择适合的方式。 2. 数据操作:dom4j提供了XPath支持,可以方便地通过...

    dom4j读取xml

    DOM4J这个名字来源于“Document Object Model”(DOM)和“Java”的组合,表明它是基于Java的对象模型来处理XML文档的。与标准的DOM API相比,DOM4J更轻量级,性能更高,且使用更加方便。 **DOM4J的主要特点** 1. ...

    dom4j-1.6.1.zip

    DOM4J这个名字来源于Document Object Model(DOM)和Java(4J)的组合,尽管它并不直接使用W3C的DOM接口,但它提供了类似的抽象概念,且在性能和灵活性上有所提升。 **DOM4J的主要功能** 1. **解析XML**:DOM4J...

    DOM4J jar包和W3CSchool.chm的文档包含XPath的教程

    Jaxen使XPath查询在不同的XML解析器之间具有可移植性,因此即使在DOM4J中使用XPath,也可以通过Jaxen调用其他解析器的实现。 "W3CSchool.chm"文档是一个经典的在线编程学习资源,其中的XPath教程可能包含了XPath的...

    dom4j-1.6.1.jar jaxen.jar

    总的来说,DOM4J-1.6.1.jar和Jaxen.jar是Java开发中的两个关键组件,它们提供了强大的XML解析和查询功能。了解和掌握这两个库的使用,对于提升Java开发者处理XML文档的能力至关重要。通过熟练运用DOM4J和Jaxen,可以...

    DOM4J创建XML是一个实例

    DOM4J支持XPath和XSLT,可以方便地进行XML文档的构建、解析和修改。 2. XML文档结构:XML是一种可扩展标记语言,用于存储和传输数据。一个基本的XML文档由元素(Element)、属性(Attribute)、文本内容(Text)等...

    (完整压缩)dom4j-1.6.1

    2. **解析XML**:DOM4J支持多种解析方式,包括SAX(Simple API for XML)和DOM解析器。SAX解析器适合处理大型XML文档,因为它使用事件驱动的方式,不会一次性加载整个文档到内存中。DOM解析器则会将整个文档加载到...

    基于UDP和TCP的Socket编程文件传输,DOM4J对于XML读写

    DOM4J基于Document Object Model (DOM)模型,能完全解析XML文档并将其转化为内存中的树形结构,方便进行查找、修改和遍历。例如,我们可以通过Element、Attribute等类来创建、修改XML元素和属性,通过XPath表达式...

    java解析XML所需要的完整包(包括XStream.jar,dom4j.jar和xpull/xpp.jar)

    XPP是一种轻量级的XML解析器,它基于PULL(Pull Parser)模式,与DOM和SAX不同,PULL解析器不创建整个文档树,而是按需逐事件地处理XML。这种方式在处理大型或流式XML文档时,能有效节省内存。XPP3通常被用作其他库...

Global site tag (gtag.js) - Google Analytics