用Dom4j解析XML及中文问题(二)

本文介绍如何利用Dom4j库完成XML文档的修改工作,包括修改属性值、更新节点内容及删除指定节点等常见任务。

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

4. 修改XML文档

 

有三项修改任务,依次为:

l         如果book节点中show属性的内容为yes,则修改成no

l         owner项内容改为Tshinghua,并添加date节点

l         title内容为Dom4j Tutorials,则删除该节点

 

 

    /**

     * 修改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;

    }

   

 

说明:

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

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

上述代码通过xpath查找到相应内容。

 

通过setValue()setText()修改节点内容。

 

通过remove()删除节点或属性。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值