您的位置:首页 > 编程语言 > Java开发

Java解析XML文件的四种方式之DOM4J解析

2014-06-30 15:05 211 查看
package com.xyls.xml;
import java.io.*;
import java.net.URI;
import java.util.*;

import org.dom4j.*;
import org.dom4j.io.*;
/*需要把dom4j-1.6.1.jar包放到D:\Java\jdk1.7.0_09\jre\lib\ext中去
 * 性能优异,功能强大,具有易用性
 * Hibernate和Spring框架中都使用了DOM4J的解析操作
 * 主要接口:
 * Attribute属性操作
 * Branch能够包含子节点的节点,定义一个公共的行为
 * CDATA定义了XML CDATA区域
 * CharacterData标识接口,基于字符的节点,如CDATA、Comment、Text
 * Comment定义了XML的注释
 * Document定义了XML文档
 * Element定义了XML元素
 * Text定义了xml文本节点
 * 操作步骤与JDOM类似
 * DOM4J本身还是需要使用SAX建立解析器
 * 总结:DOM和SAX是基础,重点掌握就行
 * */
public class DOM4JTest{
	public void generateDocument(){//该方法生成一个新的xml文档
		//使用DocumentHelper类创建一个文档实例,DocumentHelper是生成 XML 文档节点的 dom4j API 工厂类。
		Document doc = DocumentHelper.createDocument();
		//创建根元素
		Element root = doc.addElement("catalog");
		//添加一个注释
		root.addComment("An XML Catalog");
		//添加一个处理指令
		root.addProcessingInstruction("target","text");
		//添加一个元素
		Element journal = root.addElement("journal");
		//为journal元素增加两个属性title、publisher
		journal.addAttribute("title","xml zone");
		journal.addAttribute("publisher","IBM developerWorks");
		//向journal中添加子元素
		Element article = journal.addElement("article");
		//为article元素增加两个属性level、date
		article.addAttribute("level","Intermediate");
		article.addAttribute("date","December-2001");
		//向article元素中添加子元素
		Element title = article.addElement("title");
		//为title元素设置文本
		title.setText("Java configuration with XML Schema");//方法从Node继续来的
		//向article元素中添加子元素
		Element author = article.addElement("author");//方法从Branch继承而来
		//向author元素中添加子元素
		Element firstname = author.addElement("firstname");
		//设置文本
		firstname.setText("Marcello");
		//向author元素中添加子元素
		Element lastname = author.addElement("lastname");
		//设置文本
		lastname.setText("Vitaletti");

		//为文档添加类型说明
		doc.addDocType("catalog", null, null);
		
		//输出xml文件
		try{
			XMLWriter output = new XMLWriter(new FileWriter(new File("d:"+File.separator+"test"+File.separator+"catalog.xml")));
			output.write(doc);
			output.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	//还需要把jaxen-1.1-beta-6.jar放到D:\Java\jdk1.7.0_09\jre\lib\ext中去
	public void parserXML(File inputXml){
		 try{
	            //使用 SAXReader解析XML文档, SAXReader 包含在 org.dom4j.io 包中
	            SAXReader saxReader = new SAXReader();
	            Document doc = saxReader.read(inputXml);
	            //inputXml 是从 D:/TEST/catalog.xml
	            //使用 XPath 表达式从 article 元素中获得level属性节点列表。  
	            //如果 level 属性值是Intermediate则改为“111111111”。
	            List list = doc.selectNodes("//article/@level" );
	            Iterator iter=list.iterator();
	            while(iter.hasNext()){
	                Attribute attribute=(Attribute)iter.next();
	                if(attribute.getValue().equals("Intermediate"))
	                   attribute.setValue("111111111"); 
	            }

	            //使用 XPath 表达式从 article 元素中获得date属性节点列表。
	            list = doc.selectNodes("//article/@date" );
	            iter=list.iterator();
	            while(iter.hasNext()){
	                Attribute attribute=(Attribute)iter.next();
	                if(attribute.getValue().equals("December-2001"))
	                    attribute.setValue("22222222");
	            }

	            //获取 article 元素列表,从 article 元素中的 title 元素得到一个迭代器,并修改 title 元素的文本。
	            list = doc.selectNodes("//article" );
	            iter=list.iterator();
	            while(iter.hasNext()){
	                Element element=(Element)iter.next();
	                Iterator iterator=element.elementIterator("title");
	                while(iterator.hasNext()){
	                     Element titleElement=(Element)iterator.next();
	                     if(titleElement.getText().equals("Java configuration with XMLSchema"))
	                         titleElement.setText("aaaaaaaaaaaaaaaaa");
	                }
	            }

	            //从 article 元素中的 author 元素节点列表
	            list = doc.selectNodes("//article/author" );
	            iter=list.iterator();
	            while(iter.hasNext()){
	                Element element=(Element)iter.next();
	                Iterator iterator=element.elementIterator("firstname");
	                while(iterator.hasNext()){
	     		    Element firstNameElement=(Element)iterator.next();
	      		    if(firstNameElement.getText().equals("Marcello"))
	      			firstNameElement.setText("bbbbbbb");
	                }
	            }

	            //从 article 元素中的 author 元素节点列表
	            list = doc.selectNodes("//article/author" );
	            iter=list.iterator();
	            while(iter.hasNext()){
	                Element element=(Element)iter.next();
	      	        Iterator iterator=element.elementIterator("lastname");
	    	        while(iterator.hasNext()){
	      		    Element lastNameElement=(Element)iterator.next();
	     		    if(lastNameElement.getText().equals("Vitaletti"))
	     			 lastNameElement.setText("cccccccccccc");
	                }
	            }
	            OutputFormat format = OutputFormat.createPrettyPrint();//设置输出格式
	            format.setEncoding("GBK");
	            XMLWriter output = new XMLWriter(new FileOutputStream(new File("d:"+
	            File.separator+"test"+File.separator+"catalog_modified.xml")),format);//输出文件
	            output.write(doc);//输出内容
	            output.close();
	        }catch(DocumentException e){
	            System.out.println(e.getMessage());
	        }catch(IOException e){
	            System.out.println(e.getMessage());
	        }
	}
	public static void main(String args[])throws Exception{
		DOM4JTest dj = new DOM4JTest();
		//dj.generateDocument();
		File f = new File("D:"+File.separator+"test"+File.separator+"catalog.xml");
		dj.parserXML(f);
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: