dom4j(Java code)

本文介绍了一个使用Dom4j库创建、修改和读取XML文件的Java示例程序。通过具体的代码实现,展示了如何构建XML结构、修改节点内容及属性、删除特定节点以及添加新节点的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


import java.io.File;
import java.io.FileWriter;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;import org.dom4j.Document;
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 Dom4jDemo {
   
   
public boolean createXML(String fileName){
       
boolean isOk= false;
       
//建立document对象
        Document doc= DocumentHelper.createDocument();
       
//建立XML文档的根books
        Element students= doc.addElement("students");
        students.addComment(
"This is a test for dom4j");//加入一行注释
        /**加入第一个student节点*/
        Element student
= students.addElement("student");//加入第一个student节点
        student.addAttribute("value","god");//加入value属性和值
        Element name= student.addElement("name");//加入name节点
        name.setText("finina");//为name设置值
        Element age=student.addElement("age");//加入age节点
        age.setText("25");//为age设置值
        Element sex=student.addElement("sex");//加入sex节点
        sex.setText("male");//为sex设置值
        /**加入第二个student节点*/
        student
= students.addElement("student");
        student.addAttribute(
"value","cat");
        name
= student.addElement("name");
        name.setText(
"fly");
        age
=student.addElement("age");
        age.setText(
"17");
        sex
=student.addElement("sex");
        sex.setText(
"female");
       
/**加入team节点*/
        Element team
=students.addElement("team");
        team.addText(
"05093A");
       
/**
         *将doc中的内容写入xml文件中
         *
*/
       
try{
            OutputFormat format
= OutputFormat.createPrettyPrint();//设置格式
            format.setEncoding("GBK");//必要,否则无法解析中文
           
//输出为文件
            XMLWriter writer= new XMLWriter(new FileWriter(fileName),format);
            writer.write(doc);
            writer.flush();
           
//
            isOk= true;
        }
catch(Exception e){
            e.printStackTrace();
        }
       
return isOk;
    }

   
public boolean modifigXML(String oldFileName,String newFileName){
       
boolean isOk= false;
       
try{
            SAXReader reader
= new SAXReader();//创建SAX阅读器
            Document doc= reader.read(new File(oldFileName));//将所有文件内容读取生存Document对象
            /**修改内容之一: 如果student节点中value属性的内容为god,则修改成king
             *因为做人不能太嚣张
            
*/
            List list
= doc.selectNodes("/students/student/@value");//搜索出所有位于students节点下的student节点中的value属性位置放入集合中
            Iterator iter= list.iterator();//加载迭代器
           
//迭代集合
            while(iter.hasNext()){
                Attribute attr
= (Attribute)iter.next();
               
if(attr.getValue().equals("god"))//比对值是否相等
                    attr.setValue("king");//设置值
            }

            list
= doc.selectNodes("/students/team");//搜索出所有位于students节点下team节点位置放入集合中
            iter= list.iterator();//加载迭代器
           
//迭代集合
            if(iter.hasNext()){
                Element team
= (Element)iter.next();
                team.setText(
"05084A");//设置值
                Element teacher= team.addElement("teacher");//添加节点
                teacher.setText("godfather");//为新的节点设置值
                teacher.addAttribute("skill","programme");//为新的节点添加属性
            }
           
/**修改内容之三: 若age内容为17,则删除该节点
             *未成年人需要被保护...
            
*/
            list
= doc.selectNodes("/students/student");//搜索出所有位于students节点下的student节点位置放入集合中
            iter= list.iterator();//加载迭代器
           
//迭代集合
            while(iter.hasNext()){
                Element elem
= (Element)iter.next();
                Iterator iterElem
= elem.elementIterator("age");//将该节点下所有的age节点生成一个迭代器
               
//迭代集合
                if(iterElem.hasNext()){
                    Element remTitle
= (Element)iterElem.next();
                   
if(remTitle.getText().equals("17"))//对比值
                        elem.remove(remTitle);//移除该节点
                }
            }
           
//将doc中的内容写入文件中
            OutputFormat format= OutputFormat.createPrettyPrint();//设置格式
            format.setEncoding("GBK");//必要,否则无法解析中文
            
//输出为文件,以上操作只是在内存中修改,需要保存为文件来确认修改
            XMLWriter writer= new XMLWriter(new FileWriter(newFileName),format);
            writer.write(doc);
            writer.flush();
            isOk
= true;
        }
catch(Exception e){
            e.printStackTrace();
        }
       
return isOk;
    }
   
/**
     *the method readXML
    
*/
   
public void readXML(String fileName){
       
try{
            File file
= new File(fileName);//创建文件对象
            SAXReader reader= new SAXReader();//创建SAX阅读器
            Document doc= reader.read(file);//读取内容生成Document对象
            Element root= doc.getRootElement();//取得根节点
            search(root);//开始遍历
        }catch(Exception e){
            e.printStackTrace();
        }
    }
   
   
//递归遍历
    private void search(Element root) {
        Iterator it_element
= root.elementIterator();//将根节点下包含的元素组织成一个迭代器
       
//迭代
        while( it_element.hasNext()) {
            Element element
= (Element)it_element.next();
           
if(!element.getText().equals(""))
            {
                System.out.println(element.getName()
+"节点的值是"+element.getText());
            }
           
else
            {
                System.out.println(element.getName()
+"节点");
            }
            Iterator it_attr
= element.attributeIterator();
           
while( it_attr.hasNext()) {
                Attribute attr
= (Attribute)it_attr.next();
               
if(attr!=null)
                {
                    System.out.println(element.getName()
+"节点的属性"+attr.getName()+ "的值是" + attr.getValue());
                }
            }
            search(element);
//递归调用
        }
    }
   
/**
     *the method main
    
*/
   
public static void main(String[] args){
       
long start= System.currentTimeMillis();//开始计时
        Dom4jDemo dom4jDemo= new Dom4jDemo();
        String fileName
= "dom4jDemo.xml";
        String newFileName
= "new_dom4jDemo.xml";
        System.out.println(fileName
+"正在创建中...");
       
boolean isOk_create= dom4jDemo.createXML(fileName);
       
if(isOk_create) System.out.println(fileName+"创建成功!");
       
else System.out.println("创建失败!请检查后重新再试!");
       
        System.out.println(
"正在更新中...");
       
boolean isOk_modi= dom4jDemo.modifigXML(fileName, newFileName);
       
if(isOk_modi) System.out.println("恭喜,更新完成!");
       
//
        System.out.println("正在读取文件"+fileName+" ...");
        System.out.println(
"------------------------------------------------");
        dom4jDemo.readXML(fileName);
        System.out.println(
"------------------------------------------------");
        System.out.println(fileName
+"读取成功!");
        System.out.println(
"正在读取文件"+newFileName+" ...");
        System.out.println(
"------------------------------------------------");
        dom4jDemo.readXML(newFileName);
        System.out.println(
"------------------------------------------------");
        System.out.println(fileName
+"读取成功!");
        System.out.println(
"一共耗时:"+(System.currentTimeMillis()-start)+"毫秒!");
    }
}


 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值