dom4j建立,修改XML文档,并解决格式化输出和中文

package com.holen.dom4j;

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;

/**

 * @author Holen Chen

 */

public class Dom4jDemo {

    

    public Dom4jDemo() {

    }

    

    /**

     * 建立一个XML文档,文档名由输入参数决定

     * @param filename 需建立的文件名

     * @return 返回操作结果, 0表失败, 1表成功

     */

    public int createXMLFile(String filename){

       /** 返回操作结果, 0表失败, 1表成功 */

       int returnValue = 0;

       /** 建立document对象 */

        Document document = DocumentHelper.createDocument();

       /** 建立XML文档的根books */

        Element booksElement = document.addElement("books");

       /** 加入一行注释 */

        booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");

       /** 加入第一个book节点 */

        Element bookElement = booksElement.addElement("book");

       /** 加入show参数内容 */

        bookElement.addAttribute("show","yes");

       /** 加入title节点 */

        Element titleElement = bookElement.addElement("title");

       /** 为title设置内容 */

        titleElement.setText("Dom4j Tutorials");

       

       /** 类似的完成后两个book */

        bookElement = booksElement.addElement("book");

        bookElement.addAttribute("show","yes");

        titleElement = bookElement.addElement("title");

        titleElement.setText("Lucene Studing");

        bookElement = booksElement.addElement("book");

        bookElement.addAttribute("show","no");

        titleElement = bookElement.addElement("title");

        titleElement.setText("Lucene in Action");

       

       /** 加入owner节点 */

        Element ownerElement = booksElement.addElement("owner");

        ownerElement.setText("O'Reilly");

       

       try{

           /** 将document中的内容写入文件中 */

           XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));

           writer.write(document);

           writer.close();

           /** 执行成功,需返回1 */

           returnValue = 1;

        }catch(Exception ex){

           ex.printStackTrace();

       }

               

        return returnValue;

    }

    

    /**

     * 修改XML文件中内容,并另存为一个新文件

     * 重点掌握dom4j中如何添加节点,修改节点,删除节点

     * @param filename 修改对象文件

     * @param newfilename 修改后另存为该文件

     * @return 返回操作结果, 0表失败, 1表成功

     */

    public int ModiXMLFile(String filename,String newfilename){

       int returnValue = 0;

       try{

           SAXReader saxReader = new SAXReader();    

           Document document = saxReader.read(new File(filename));

           /** 修改内容之一:如果book节点中show参数的内容为yes,则修改成no */

           /** 先用xpath查找对象 */

           List list = document.selectNodes("/books/book/@show" );    

           Iterator iter = list.iterator();

           while(iter.hasNext()){

               Attribute attribute = (Attribute)iter.next();

               if(attribute.getValue().equals("yes")){

                   attribute.setValue("no");

               }   

           }

           

           /**

            * 修改内容之二:把owner项内容改为Tshinghua

            * 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个参数type

            */

           list = document.selectNodes("/books/owner" );

           iter = list.iterator();

           if(iter.hasNext()){

               Element ownerElement = (Element)iter.next();

               ownerElement.setText("Tshinghua");

               Element dateElement = ownerElement.addElement("date");

               dateElement.setText("2004-09-11");

               dateElement.addAttribute("type","Gregorian calendar");

           }

           

           /** 修改内容之三:若title内容为Dom4j Tutorials,则删除该节点 */

           list = document.selectNodes("/books/book");

           iter = list.iterator();

           while(iter.hasNext()){

               Element bookElement = (Element)iter.next();

               Iterator iterator = bookElement.elementIterator("title");

               while(iterator.hasNext()){

                   Element titleElement=(Element)iterator.next();

                   if(titleElement.getText().equals("Dom4j Tutorials")){

                      bookElement.remove(titleElement);

                  }

               }

           }           

           

           try{

               /** 将document中的内容写入文件中 */

               XMLWriter writer = new XMLWriter(new FileWriter(new File(newfilename)));

               writer.write(document);

               writer.close();

               /** 执行成功,需返回1 */

               returnValue = 1;

           }catch(Exception ex){

               ex.printStackTrace();

           }

           

        }catch(Exception ex){

           ex.printStackTrace();

       }

        return returnValue;

    }

    

    /**

     * 格式化XML文档,并解决中文问题

     * @param filename

     * @return

     */

    public int formatXMLFile(String filename){

       int returnValue = 0;

       try{

           SAXReader saxReader = new SAXReader();    

           Document document = saxReader.read(new File(filename));

           XMLWriter output = null;

           /** 格式化输出,类型IE浏览一样 */

           OutputFormat format = OutputFormat.createPrettyPrint();

           /** 指定XML字符集编码 */

           format.setEncoding("GBK");

           output = new XMLWriter(new FileWriter(new File(filename)),format);

           output.write(document);

           output.close();        

           /** 执行成功,需返回1 */

           returnValue = 1;       

        }catch(Exception ex){

           ex.printStackTrace();

       }

        return returnValue;

    }

    public static void main(String[] args) {

        Dom4jDemo temp = new Dom4jDemo();

        System.out.println(temp.createXMLFile("d://holen.xml"));

        System.out.println(temp.ModiXMLFile("d://holen.xml","d://holen2.xml"));

        System.out.println(temp.formatXMLFile("d://holen2.xml"));

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
4j是一个Java的XML API,它提供了一种方便的方式来处理XML文档。如果你想使用dom4j格式XML字符串,可以按照以下步骤进行操作: 1. 首先,你需要将XML字符串解析为一个Document对象。你可以使用dom4j提供的SAXReader类来完成这个任务。例如: ```java SAXReader reader = new SAXReader(); Document document = reader.read(new ByteArrayInputStream(xmlString.getBytes())); ``` 2. 接下来,你需要创建一个OutputFormat对象,并设置它的属性来指定输出格式。例如: ```java OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); ``` 在这个例子中,我们使用createPrettyPrint()方法创建了一个格式化的OutputFormat对象,并设置了它的编码为UTF-8。 3. 然后,你需要创建一个XMLWriter对象,并将它与一个Writer对象关联起来。例如: ```java StringWriter writer = new StringWriter(); XMLWriter xmlWriter = new XMLWriter(writer, format); ``` 在这个例子中,我们使用了一个StringWriter对象来作为XMLWriter的输出目标。 4. 最后,你需要将Document对象写入XMLWriter中。例如: ```java xmlWriter.write(document); xmlWriter.flush(); ``` 在这个例子中,我们使用了write()方法将Document对象写入XMLWriter中,并使用flush()方法将缓冲区中的内容刷新到输出目标中。 完整的代码如下所示: ```java SAXReader reader = new SAXReader(); Document document = reader.read(new ByteArrayInputStream(xmlString.getBytes())); OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); StringWriter writer = new StringWriter(); XMLWriter xmlWriter = new XMLWriter(writer, format); xmlWriter.write(document); xmlWriter.flush(); String formattedXmlString = writer.toString(); ``` 这个代码片段将会把XML字符串格式化输出到formattedXmlString变量中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值