Dom4J对XML文件的读取和写入

       dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个十分优秀的JavaXML API,具有性能优异、功能强大和极其易使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面还可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,所以可以知道dom4j无论在哪个方面都是非常出色的。如今可以看到越来越多的Java软件都在使用dom4j来读写XML,特别值得一提的是连Sun的JAXM也在用dom4j。这已经是必须使用的jar包, Hibernate也用它来读写配置文件。

      而学习java的时候,我们免不了就是大堆小堆的配置文件,那么如何读取配置文件呢。

      使用前准备的jar包

     dom4j-1.6.1.jar

     jaxen-1.1-beta-6.jar

     下载地址:http://sourceforge.net/projects/dom4j/files/latest/download

     我用的是MyEclipse新建了一个普通的java项目,然后新建一个lib文件,把上边的两个jar包放进去,然后右键--》build path--》Add to Bulid Path,这样我们src下的类文件就可以使用了。

     Dom4j的学习

     读取XML文件

    读取得先有一个XML文件不是,所以先给大家XML文件

   





  1
  7891
  sdffff
  job
  
  2010-1-1
  5000.00
  1000.00
  



  2
  7369
  SMITH
  CLERK
  7902
  1980-12-17
  800.00
  
  20

百度
孟海滨博客


 

     首先要读取一个XML文件,你得先找到他,那么找到他的方法就如下

/**
	 * 根据地址获得一个Document(XML文件)
	 * @param url  地址
	 * @return Docuyment
	 * @throws DocumentException
	 */
	public Document parse(String url) throws DocumentException {
		SAXReader reader = new SAXReader();
		Document document = reader.read(url);
		return document;
	}

    找到以后呢,当然是找到了文档,我们就要读取礼拜的数据,或者找节点。这里我们写了几个找节点的方法,从而获得他们所有的节点,用了迭代器来循环。分别是找到根节点,找到跟元素为'foo'的元素,找到子节点的属性。

	/**
	 * 找Document里的元素
	 * @param document
	 * @throws DocumentException
	 */
	public void bar(Document document) throws DocumentException {
		Element root = document.getRootElement();
		
		//获得根节点
		for( Iterator itr = root.elementIterator(); itr.hasNext();){
			Element element = (Element)itr.next();
			//TODO
		}

		//遍历子元素的根元素名称“foo”的节点
		for ( Iterator i = root.elementIterator("foo"); i.hasNext();){
			Element foo = (Element)i.next();
			//TODO
		}
		
		//遍历子元素的属性
		for (Iterator i = root.attributeIterator(); i.hasNext();){
			Attribute attribute = (Attribute) i.next();
			//TODO
		}
	}


       上边是找到了所有的节点,那么我们当然是要获取节点里边的值的,就好像我们链接数据库,绝对不是找到那张表就可以了,而是需要礼拜的数据,而获取数据也分为两种,获取单一的某一个节点(Node)的值和获取所有节点的值。

      获取单一节点的值

/**
	 * 读取文档中某一个节点的值
	 * @param document
	 * @throws DocumentException
	 */
	public void barXPath(Document document) throws DocumentException{

		List list = document.selectNodes("//ROWDATA/ROW");
		Node node = document.selectSingleNode("//ROWDATA/ROW/ENAME");
		System.out.println("node1 = " + node.getStringValue());
		
	}

       获取所有节点的值(for循环)

/**
	 * 循环遍历每一个节点
	 * @param element
	 */
	public void treeWalk(Element element) {
		for ( int i=0, size = element.nodeCount(); i < size; i++){
			Node node = element.node(i);
			if (node instanceof Element ) {
				treeWalk ((Element)node);
				System.out.println("node = " + node.getText());
			}
			else {
				//do something
			}
		}
		
		
	}

      当然也有一种获取一个节点的属性值,例如我们在HTML中都有链接孟海滨博客,那我如何获得链接呢。代码如下

/**
	 * 读取文档中的链接
	 * @param document
	 * @throws DocumentException
	 */
	public void findLink(Document document) throws DocumentException {
		List list = document.selectNodes("//a/@href");
		for( Iterator iter = list.iterator(); iter.hasNext();) {
			Attribute attribute = (Attribute) iter.next();
			String url = attribute.getValue();
			System.out.println("url = " + url.toString());
		}
	}

        创建XML文件

        创建Document

/**
	 * 创建一个Document的文本
	 * @return
	 */
	public Document createDocument() {
		//创建document
		Document document = DocumentHelper.createDocument();
		//创建根元素
		Element root = document.addElement("root");
		
		//添加子节点1和设置属性
		Element auther1 = root.addElement("auther")
				.addAttribute("name", "James")
				.addAttribute("location", "UK")
				.addText("James SXtrachan");
		//添加子节点2和设置属性
		Element auther2 = root.addElement("auther")
				.addAttribute("name", "Bob")
				.addAttribute("location", "US")
				.addText("James McWhirter");
		return document;
	}

       讲Document写入到XML文件中

/**
	 * 讲Document写入到output.xml文件
	 * @param document
	 * @throws IOException
	 */
	public void wirte(Document document) throws IOException {
		//写一个没有格式的XML文件
		XMLWriter write = new XMLWriter(
				new FileWriter("/src/output.xml")
				);
		write.write(document);
		write.close();
		
		// 创建文件输出的时候,自动缩进的格式      
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("UTF-8");
		XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
		
	
	}
	


      Dom4j对于XML的操作大概就是这个样子,当然这个也是初步的了解Dom4j,当然还有JDom,SAX和java的代码都可以读取XML文件,只不过这个用起来感觉更方便,所以总结了一下。初学者,有问题希望指出来。




 

 

你可能感兴趣的:(XML和Dom4j)