用DOM4J创建及修改XML文件(转)

代码如下:

package  com.willpower.parsexml;

import  java.io.File;
import  java.io.FileWriter;
import  java.io.IOException;
import  java.util.Iterator;
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.io.OutputFormat;
import  org.dom4j.io.SAXReader;
import  org.dom4j.io.XMLWriter;

public   class  ParseXml  {

    
/**
     * 创建XML文件
     * 
@author cnyqiao@hotmail.com
     * 
@param fileName
     * @date Jul 10, 2006 3:34:58 PM
     * 
@return rtn true or false
     
*/

    
public boolean createXMLFile(String fileName) {
        
boolean rtn = false;
        
// 使用DocumentHelper.createDocument方法建立一个文档实例
        Document document = DocumentHelper.createDocument();
        
// 使用addElement方法方法创建根元素
        Element catalogElement = document.addElement("catalog");
        
// 使用addComment方法方法向catalog元素添加注释
        catalogElement.addComment("An XML cataog");
        
// 使用addProcessInstruction向catalog元素增加处理指令
        catalogElement.addProcessingInstruction("target""text");

        
// 使用addElement方法向catalog元素添加journal子元素
        Element journalElement = catalogElement.addElement("journal");
        
// 使用addAttribute方法向journal元素添加title和publisher属性
        journalElement.addAttribute("title""XML Zone");
        journalElement.addAttribute(
"publisher""Willpower Co");

        
// 使用addElement方法向journal元素添加article子元素
        Element articleElement = journalElement.addElement("article");
        
// 使用addAttribute方法向article元素添加level和date属性
        articleElement.addAttribute("level""Intermediate");
        articleElement.addAttribute(
"date""July-2006");

        
// 使用addElement方法向article元素添加title子元素
        Element titleElement = articleElement.addElement("title");
        
// 使用setText方法设置title子元素的值
        titleElement.setText("Dom4j Create XML Schema");

        
// 使用addElement方法向article元素添加authorElement子元素
        Element authorElement = articleElement.addElement("author");

        
// 使用addElement方法向author元素添加firstName子元素
        Element firstName = authorElement.addElement("fistname");
        
// 使用setText方法设置firstName子元素的值
        firstName.setText("Yi");

        
// 使用addElement方法向author元素添加lastname子元素
        Element lastName = authorElement.addElement("lastname");
        
// 使用setText方法设置lastName子元素的值
        lastName.setText("Qiao");

        XMLWriter output;
        
//输出格式化
        OutputFormat format = OutputFormat.createPrettyPrint();
        
try {
            output 
= new XMLWriter(new FileWriter(fileName), format);
            output.write(document);
            output.close();
            rtn 
= true;
        }
 catch (IOException e) {
            e.printStackTrace();
        }


        
return rtn;
    }


    
/**
     * 修改XML文件
     * 
@author cnyqiao@hotmail.com
     * 
@param fileName
     * 
@param newFileName
     * @date Jul 10, 2006 4:03:33 PM
     * 
@return
     
*/

    
public boolean modiXMLFile(String fileName, String newFileName) {
        
        
boolean rtn = false;
        
        SAXReader reader 
= new SAXReader();
        
try {
            Document document 
= reader.read(new File(fileName));
            
//用xpath查找对象
            List list = document.selectNodes("/catalog/journal/@title");
            Iterator itr 
= list.iterator();
            
while(itr.hasNext()) {
                Attribute attribute 
= (Attribute)itr.next();
                
if(attribute.getValue().equals("XML Zone")) {
                    attribute.setText(
"Modi XML");
                }

            }

            
//在journal元素中增加date元素
            list = document.selectNodes("/catalog/journal");
            itr 
= list.iterator();
            
if(itr.hasNext()) {
                Element journalElement 
= (Element)itr.next();
                Element dateElement 
= journalElement.addElement("date");
                dateElement.setText(
"2006-07-10");
                dateElement.addAttribute(
"type""Gregorian calendar");
            }

            
//删除title接点
            list = document.selectNodes("/catalog/journal/article");
            itr 
= list.iterator();
            
while(itr.hasNext()) {
                Element articleElement 
= (Element)itr.next();
                Iterator iter 
= articleElement.elementIterator("title");
                
while(iter.hasNext()) {
                    Element titleElement 
= (Element)iter.next();
                    
if(titleElement.getText().equals("Dom4j Create XML Schema")) {
                        articleElement.remove(titleElement);
                    }

                }

            }

            XMLWriter output;
            OutputFormat format 
= OutputFormat.createPrettyPrint();
            
try {
                output 
= new XMLWriter(new FileWriter(newFileName), format);
                output.write(document);
                output.close();
                rtn 
= true;
            }
 catch (IOException e) {
                e.printStackTrace();
            }

            
            
        }
 catch (DocumentException e) {            
            e.printStackTrace();
        }

        
        
return rtn;
        
    }

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
        ParseXml parseXml 
= new ParseXml();
        String fileName 
= "d://dom4j.xml";
        String newFileName 
= "d://modi.xml";
        
if(parseXml.createXMLFile(fileName)) {
            System.out.println(
"Create XML File Success");
        }

        
        
if(parseXml.modiXMLFile(fileName, newFileName)) {
            System.out.println(
"Modify XML File Success");
        }


    }


}


在修改XML时,需要用到jaxen-1.1-beta-6.jar,这里http://sourceforge.net/project/showfiles.php?group_id=16035&package_id=14121&release_id=328664下载,记住下那个zip包啊,这个包里的lib下有上面提到的那个文件,放在classpath下即可
不然会报ClassNotFound异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值