使用dom4j修改xml元素

预先编写一个xml文件books.xml ,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<books>
	<!--This is a test for dom4j, jakoes, 2007.7.19-->
	<book show="yes" url="lucene.net">
		<title id="456">Lucene 学习</title>
	</book>
	<book show="yes" url="dom4j.com">
		<title id="123">Dom4j Tutorials</title>
	</book>
	<book show="no" url="spring.org">
		<title id="789">Spring in Action</title>
	</book>
	<owner>O'Reilly</owner>
</books>  

 修改books.xml文件的java代码XmlModify.java

/**
 * XmlModify.java 
 * 2011-2-21 下午03:07:14
 */
package com.gbit.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
 * @author linzq
 * 
 */
public class XmlModify
{

    /**
     * @param args
     * @throws DocumentException
     * @throws IOException
     */
    public static void main(String[] args) throws DocumentException,
            IOException
    {
        String path = XmlModify.class.getResource(".").getFile().toString();
        SAXReader reader = new SAXReader();
        // 设置读取文件内容的编码
        reader.setEncoding("GBK");
        Document doc = reader.read(path + "books.xml");
        // System.out.println(doc);

        // 修改内容之一: 如果book节点中show属性的内容为yes,则修改成no
        // 先用xpath查找对象
        // 根据试用,根节点books的xpath路径要加/或不加都可以。
        List<Attribute> attrList = doc.selectNodes("books/book/@show");
        Iterator<Attribute> i = attrList.iterator();
        while (i.hasNext())
        {
            Attribute attribute = i.next();
            if (attribute.getValue().equalsIgnoreCase("yes"))
            {
                attribute.setValue("no");
            }
        }

        // 修改内容之二: 把owner项内容改为Tshinghua
        // 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个属性type
        List<Element> eleList = doc.selectNodes("owner");
        Iterator<Element> eleIter = eleList.iterator();
        if (eleIter.hasNext())
        {
            Element ownerElement = eleIter.next();
            ownerElement.setText("Tshinghua");
            Element dateElement = ownerElement.addElement("date");
            DateFormat df = SimpleDateFormat.getDateInstance();
            dateElement.setText(df.format(new Date()));
            ownerElement.addAttribute("type", "Gregorian calendar");
        }

        // 修改内容之三: 若title内容为Dom4j Tutorials,则删除该节点
        eleList = doc.selectNodes("books/book");
        eleIter = eleList.iterator();
        while (eleIter.hasNext())
        {
            Element element = eleIter.next();
            Iterator<Element> titleIter = element.elementIterator("title");
            while (titleIter.hasNext())
            {
                Element title = titleIter.next();
                if (title.getText().equalsIgnoreCase("Dom4j Tutorials"))
                {
                    element.remove(title);
                }
            }
        }
        OutputFormat format = OutputFormat.createPrettyPrint();
        // 利用格式化类对编码进行设置
        format.setEncoding("GBK");
        FileOutputStream output = new FileOutputStream(new File(path +
                "books1.xml"));
        XMLWriter writer = new XMLWriter(output, format);
        writer.write(doc);
        writer.flush();
        writer.close();
    }
}

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值