`
M_ittrue
  • 浏览: 76999 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

dom4j的简单应用

 
阅读更多
  在做一个进销存项目,底层存储结构由原先的Mysql改为了直接用xml来存,所以特意去学了一下dom4j的一些使用方法。
  可能一些例子会借用网上已流传开来的代码,毕竟挺适合入门的。
  先贴代码吧。
 /**
     *
     * @param filename
     * @return:return o stand for sucessfully! return 1 stand for fail!
     * @throws IOException 
     */
    public int createXmlFile(String filename) throws IOException{
    	int returnValue = 0;
    	//取得document对象,也就是XML文档对象
    	Document document = org.dom4j.DocumentHelper.createDocument();
    	//建立根结点
    	Element booksElement = document.addElement("books");
    	//加一行注解
    	booksElement.addComment("This is my Dom4J test firstly!!");
    	//建立第一个子结点
    	Element bookElement = booksElement.addElement("book");
    	//为子结点添加属性
    	bookElement.addAttribute("show", "yes");
    	//为子结点添加一个title标题
    	bookElement.addElement("title").setText("Lucene Studing");
    	
    	//建立第二个子结点
    	bookElement = booksElement.addElement("book");
    	//为子结点添加属性
    	bookElement.addAttribute("show", "yes");
    	//为子结点添加一个title标题
    	bookElement.addElement("title").setText("Dom4j  Tutorials");
    	
    	//建立第三个子结点
    	bookElement = booksElement.addElement("book");
    	//为子结点添加属性
    	bookElement.addAttribute("show", "yes");
    	//为子结点添加一个title标题
    	bookElement.addElement("title").setText("Lucene in Action");
    	
    	//建立第四个结点
    	Element owner = booksElement.addElement("owner");
    	owner.setText("O'Reilly");
    	File file = new File(filename);
    	FileWriter fw = new FileWriter(file);
    	OutputFormat format = OutputFormat.createPrettyPrint();
    	format.setEncoding("GBK");
    	org.dom4j.io.XMLWriter xmlWriter = new XMLWriter(fw,format);
    	xmlWriter.write(document);
    	xmlWriter.flush();
    	xmlWriter.close();
    	returnValue = 1;
		return returnValue;
    	
    }
    
    public int ModiXMLFile(String filename,String newfilename) throws IOException{
    	int resultvale = 0;
    	//取得document结象
    	try {
			SAXReader reader = new org.dom4j.io.SAXReader(filename);
			Document document = reader.read(new File(filename));
			//取得list
			List list = document.selectNodes("/books/book/@show");
			Iterator iter = list.iterator();
			while(iter.hasNext()){
				Attribute attribute = (Attribute)iter.next();
				if(attribute.getValue().equals("yes")){
					attribute.setValue("no");
				}
			}
			
			list = document.selectNodes("/books/owner");
			iter = list.iterator(); 
			if(iter.hasNext()){
				Element owner = (Element)iter.next();
				owner.setText("Tshinghua");
				Element dataElement = owner.addElement("data");
				dataElement.setText("2011-10-11");
				dataElement.addAttribute("type", "Gregorian calendar");
			}
			
			list = document.selectNodes("/books/book");
			iter = list.iterator();
			while(iter.hasNext()){
				Element bookElement = (Element)iter.next();
				Iterator iterator = bookElement.elementIterator("title");
				while(iterator.hasNext()){
					Element titleElement = (Element)iterator.next();
					if(titleElement.getText().equals("Dom4j Tutorials")){
						bookElement.remove(titleElement);
					}
				}
			}
			XMLWriter writer = new XMLWriter(new FileWriter(new File(newfilename)));
			writer.write(document);
			writer.close();
			return resultvale;
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	
    	return resultvale;
    }
    
    /**
     * 格式化XML 文档,并解决中文问题
     * @param filename
     * @return
     * @throws IOException 
     */
    public int formatXMLFile(String filename) throws IOException{
    	/** 返回操作结果, 0 表失败, 1 表成功*/
    	int returnValue = 0;
    	SAXReader reader = new SAXReader();
    	try {
			Document document = reader.read(new File(filename));
			XMLWriter writer = null;
			//得到格式化输出对像
			//紧凑型
			OutputFormat format = OutputFormat.createCompactFormat();
			//优雅型
			//OutputFormat format = OutputFormat.createPrettyPrint();
			//设定格式化的字符集,以支持中文 
			format.setEncoding("UTF-8");
			writer = new XMLWriter(new FileWriter(new File(filename)),format);
		    writer.write(document);
		    writer.close();
		    returnValue =1;
    	} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	
    	return returnValue;
    }
    
    /**
     * 各种迭代法
     * @param document
     * @throws DocumentException
     */
    public void bar(Document document) throws DocumentException {
    	Element root = document.getRootElement();
    	//迭代根元素下面的所有子元素
    	for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
    	Element element = (Element) i.next();
    	//处理代码
    	}
    	//迭代根元素下面名称为"foo"的子元素
    	for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
    	Element foo = (Element) i.next();
    	//处理代码
    	}
    	// 迭代根元素的属性attributes)元素
    	for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
    	Attribute attribute = (Attribute) i.next();
    	// do something
    	}
    	}

   上面是网上的一些代码例子,我自已是理解了,然后重新敲了一遍。体会是dom4j在读写操作xml方面还是挺不错的,生成xml文件实际是一个建树的过程,一个node一个node的接上去,然后对每个node加上一些属性,数值。最终会建成一颗只有一个根结点的树。当建好树,你想写入到真正的文件中时,如有中文,可以格式化一下文档对像,有两种排列文式可以让你选技,当然,不同版本的DOM4J可能有不同的外插件实现更多的人性化功能,而我觉得本身它最终的开发版功能已经足够了。
    而对xml文件进行读取的时候,实际上是一个反向过程,它提供了XPATH等快速定位结点的功能,再结合一系列的迭代方法,相信你可以很快的找到你想要的结点,进而对它进行修改,删除等一系列操作。
    下面贴出我写的一个添加表单的方法,以供大家学习。
/**
	 * 添加新的进货单到xml中
	 * 
	 * @flag:1:为进货单 2:为出货单 3:为借卖单 4为借出单
	 * @return:如果操作成功返回1,否则反回0;
	 * @throws IOException
	 */
	public int AddStockList(Object obj) throws IOException {
		int resultvale = 0;
		Document document = null;
		try {
			SAXReader reader = new org.dom4j.io.SAXReader();
			document = reader.read(new File("rc/进货单.xml"));

			Element rootElement = document.getRootElement();

			Element saleListElement = rootElement.addElement("进货单号").addAttribute("进货单号", "")
					.addAttribute("日期", "").addAttribute("录入人", "")
					.addAttribute("经手人", "").addAttribute("供应商名称", "")
					.addAttribute("联系人", "").addAttribute("联系方式", "")
					.addAttribute("总金额", "").addAttribute("已付款", "");

			Element goodElement = saleListElement.addElement("进货项");
			Element publicElement = goodElement.addElement("货物名称");
			publicElement.setText("");
			publicElement = goodElement.addElement("批次");
			publicElement.setText("");
			publicElement = goodElement.addElement("规格");
			publicElement.setText("");
			publicElement = goodElement.addElement("描述");
			publicElement.setText("");
			publicElement = goodElement.addElement("单价");
			publicElement.setText("");
			publicElement = goodElement.addElement("数量");
			publicElement.setText("");
			Element entryElement = goodElement.addElement("已入库记录")
					.addAttribute("入库总数量", "");
			publicElement = entryElement.addElement("入库记录")
					.addAttribute("日期", "").addAttribute("数量", "");

			Element expenditureElement = saleListElement.addElement("出账记录");
			Element dataElement = expenditureElement.addElement("出账日期");
			dataElement.setText("");
			Element moneyElement = expenditureElement.addElement("出账金额");
			moneyElement.setText("");

			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding("GBK");
			XMLWriter writer = new XMLWriter(new FileWriter(new File(
					"rc/进货单.xml")),format);
			writer.write(document);
			writer.close();
			return resultvale;
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return resultvale;
	}
	


/**
	 * 以清单号来查询数据
	 * @param number
	 * @return
	 */
	public Object SelectByNumber(String number){
		SAXReader reader = new org.dom4j.io.SAXReader();
		Document document;
		try {
			document = reader.read(new File("rc/借出单.xml"));
			Element rootElement = document.getRootElement();
			Iterator iter = rootElement.elementIterator();
			while(iter.hasNext()){
				Element infoElement = (Element)iter.next();
				if(infoElement.attributeValue("借卖单号").equals(number)){
					//取数据
				}
			}
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 保存修改后的清单
	 * @param boj
	 */
	public void SaveGoodsList(Object obj,String number){
		SAXReader reader = new org.dom4j.io.SAXReader();
		Document document;
		try {
			document = reader.read(new File("rc/借卖单.xml"));
			Element rootElement = document.getRootElement();
			Iterator iter = rootElement.elementIterator();
			while(iter.hasNext()){
				Element infoElement = (Element)iter.next();
				if(infoElement.attributeValue("借卖单号").equals(number)){
					//移除该结点,利用add方法加入新结点
					document.remove(infoElement);
					AddMarginSellingList(obj);
				}
			}
			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding("GBK");
			XMLWriter writer = new XMLWriter(new FileWriter(new File(
					"rc/借卖单.xml")),format);
			writer.write(document);
			writer.close();
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 以清单号来删除某一清单
	 * @param obj
	 * @param number
	 */
	public void DelGoodsList(String number){
		SAXReader reader = new org.dom4j.io.SAXReader();
		Document document;
		try {
			document = reader.read(new File("rc/借卖单.xml"));
			Element rootElement = document.getRootElement();
			Iterator iter = rootElement.elementIterator();
			while(iter.hasNext()){
				Element infoElement = (Element)iter.next();
				if(infoElement.attributeValue("借卖单号").equals(number)){
					//移除该结点,利用add方法加入新结点
					System.out.println(infoElement.getName());
					rootElement.remove(infoElement);
				}
			}
			OutputFormat format = OutputFormat.createPrettyPrint();
			format.setEncoding("GBK");
			XMLWriter writer = new XMLWriter(new FileWriter(new File(
					"rc/借卖单.xml")),format);
			writer.write(document);
			writer.close();
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 
分享到:
评论

相关推荐

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

    4. **XPath支持**:DOM4J实现了XPath表达式,允许通过简单的字符串查询XML文档中的任意节点,大大提高了代码的可读性和效率。 5. **XML Schema支持**:DOM4J能够处理XML Schema,进行XML文档的验证,确保数据的正确...

    dom4j_dom4j1.6.1安装包_

    在本文中,我们将深入探讨DOM4J 1.6.1版本的安装及其在Maven项目中的应用。 首先,DOM4J是一个基于Java的XML处理库,它支持多种XML处理模型,如SAX和DOM。DOM4J的核心特性包括XML文档的构建、解析、查询和修改。它...

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    首先,DOM4J 1.6.1是较早的一个稳定版本,广泛应用于各种项目。它支持SAX和DOM解析器,同时提供了基于事件的解析模型和基于树的解析模型。此版本的主要特性包括: 1. 支持XPath:DOM4J提供了一种强大的方式来查询...

    dom4j dom4j dom4j dom4j

    5. **灵活性**:DOM4J可以轻松地与Spring、Hibernate等框架集成,广泛应用于企业级开发中。 6. **XML Schema支持**:DOM4J能够处理XML Schema,进行XML文档的验证,确保数据的正确性。 7. **XML编解码**:DOM4J...

    dom4j-2.1.3.zip

    DOM4J是一个强大的Java XML API,它提供了丰富的XML处理功能,包括文档对象模型(DOM)、简单API(SAX)以及事件驱动模型(StAX)。在本篇文章中,我们将深入探讨DOM4J 2.1.3版本,了解其核心特性、用途以及如何利用...

    dom4j-2.0.3.zip

    以下是一个简单的示例,展示如何使用DOM4J读取XML文档并查询元素: ```java import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; public class Dom4JExample { public ...

    dom4j所依赖的所有jar包

    DOM4J 1.6.1是这个库的一个稳定版本,发布于较早时期,但依然广泛应用于许多Java项目中,尤其是那些需要处理XML数据的系统。 首先,我们要了解DOM4J的核心概念。DOM(Document Object Model)是一种W3C标准,用于...

    dom4j 2.1.1

    DOM4J 2.1.1 是一个针对Java平台的高效、开源的XML处理库,其全称为“Document Object Model for Java”。这个库提供了一系列强大...无论是在简单的XML读写,还是复杂的XML操作和处理,DOM4J都能提供强大而灵活的支持。

    dom4j.jar 下载

    在Java应用程序中,DOM4J作为一个流行的选择,尤其在处理复杂的XML结构时,因为它提供了比标准DOM(Document Object Model)更简单和更有效的接口。 标题中的"dom4j.jar下载"指的是获取DOM4J库的可执行文件,即Java...

    利用DOM4J解析SOAP的简单示例

    在实际应用中,解析SOAP消息通常结合网络请求,例如使用Apache HttpClient发送SOAP请求并接收响应,然后使用DOM4J解析响应内容。了解DOM4J库的其他功能,如XPath查询、命名空间处理等,可以帮助更高效地处理复杂SOAP...

    dom4j的Java工程

    通过研究其中的代码,你可以掌握DOM4J处理XML的基本技巧,并理解如何将其应用到实际的Java项目中,以实现XML文件的高效管理和操作。无论是新手还是有经验的开发者,都能从中受益匪浅,提升对XML处理的能力。

    dom4j(2.1.1+ 2.0.2+ 1.6.1).zip

    DOM4J因其简单易用和强大的功能,成为Java XML处理领域的重要选择。学习DOM4J有助于理解XML处理的基本原理,提升XML文档操作的效率,同时在实际项目中能够更灵活地处理XML数据。无论是新手还是经验丰富的开发者,DOM...

    java dom4j 简单示例

    在这个“java dom4j 简单示例”中,我们将探讨如何在Spring框架的上下文中,结合数据库操作,使用DOM4J生成XML文档,并进一步利用Transformer进行XSLT转换。 首先,DOM4J的核心概念是Document对象,它代表整个XML...

    Dom4j的用法

    首先,Dom4j的应用非常简单,只需要对XML-DOM模型有基本的了解就能上手使用。 Dom4j的接口大部分定义在org.dom4j包中,这包括对XML文档节点进行操作的接口。例如,org.dom4j.Document接口代表了整个XML文档对象,...

    dom4j完整版.zip

    DOM4J是一个强大的Java库,专门用于处理XML文档。它为开发者提供了丰富的API,使得XML的解析、创建、修改和查询变得更为简单。这个“dom4j完整版.zip”...同时,提供的相关资源也能帮助开发者更好地理解和应用DOM4J。

    dom4j-1.6.1.jar.zip

    1. **DOM4J概述**:DOM4J是一个开源的Java XML API,它是对DOM、SAX和JDOM的扩展,提供了更简单、更灵活且更强大的API。它支持XPath和XSLT,可以用于构建和解析XML文档,同时也支持事件模型和流解析。 2. **XML处理...

    dom4j-1.6.1.jar

    4. **XPath支持**:XPath是一种在XML文档中查找信息的语言,dom4j支持XPath 1.0规范,可以通过简单的表达式快速找到需要的节点。 5. **事件处理**:dom4j也支持事件处理模型,允许开发者在XML解析过程中响应特定的...

Global site tag (gtag.js) - Google Analytics