Dom4j解析XML学习代码

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

项目截图:注意导入红色方框内的两个jar包。

三个函数,一个用于创建xml文件,一个用于修改xml文件,一个用于格式化xml文件。

复制代码
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 Dom4jXML {
    public static int createXMLFile(String filename){
        /*返回操作结果*/
        int returnValue = 0;
        /*建立document对象*/
        Document document = DocumentHelper.createDocument();
        /*建立XML文档的根books*/
        Element booksElement = document.addElement("books");
        /*加入一行注释*/
        booksElement.addComment("This is a test for dom4j, ZHe, 2012.11.26");
        /*加入第一个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("Zhang He");
        
        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;        
    }
    public static int modifyXMLFile(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项内容改为CheeseZH
             * 并在owner节点中加入date节点,date节点的内容为2012-11-27
             * 还要为date节点添加一个属性type
             */
            list = document.selectNodes("books/owner");
            iter = list.iterator();
            if(iter.hasNext()){
                Element ownerElement = (Element)iter.next();
                ownerElement.setText("CheeseZH");
                Element dateElement = ownerElement.addElement("date");
                dateElement.setText("2012-11-27");
                dateElement.addAttribute("type", "Gregoran 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;
    }
    public static int formatXMLFile(String filename){
        int returnValue = 0;
        try{
            SAXReader saxReader = new SAXReader();
            Document document = saxReader.read(new File(filename));
            XMLWriter writer = null;
            /*格式化输出,类似IE浏览器一样*/
            OutputFormat format = OutputFormat.createPrettyPrint();
            /*指定XML编码*/
            format.setEncoding("GB2312");
            writer = new XMLWriter(new FileWriter(new File(filename)),format);
            writer.write(document);
            writer.close();
            /*执行成功,返回1*/
            returnValue = 1;
        }catch(Exception ex){
            
        }
        return returnValue;
    }
    public static void main(String[] args){
        createXMLFile("zhanghe.xml");
        modifyXMLFile("zhanghe.xml","CheeseZH.xml");
        formatXMLFile("zhanghe.xml");
    }

}
复制代码

1.创建Document对象(xml对象),用addElement添加根节点(Element对象);

2.Element对象三个重要方法:

addComment:添加注释

addAttribute:添加属性

addElement:添加子元素

3.XMLWriter用于生成物理文件,默认使用OutputFormat类的createCompactFormat(),可以使用createPrettyPrint()

4.List list = document.selectNodes("/books/book");是通过xpath查找相应内容

关于Xpath语法,可以参考:http://www.cnblogs.com/CheeseZH/archive/2012/11/28/2791983.html

5.setValue(),setText()可以修改结点内容,remove()可以删除结点或者属性

6.OutputFormat format = OutputFormat.createPrettyPrint();指定了格式化方式为缩进式,而非紧凑式;

   format.setEncoding("GB2312");用于指定编码

   之后的XMLWriter生成物理文件时,多了一个OutputFormat对象作为参数



本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/11/28/2791914.html,如需转载请自行联系原作者

相关文章
|
2月前
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
|
4天前
|
自然语言处理 搜索推荐 数据安全/隐私保护
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
鸿蒙登录页面设计展示了 HarmonyOS 5.0(Next)的未来美学理念,结合科技与艺术,为用户带来视觉盛宴。该页面使用 ArkTS 开发,支持个性化定制和无缝智能设备连接。代码解析涵盖了声明式 UI、状态管理、事件处理及路由导航等关键概念,帮助开发者快速上手 HarmonyOS 应用开发。通过这段代码,开发者可以了解如何构建交互式界面并实现跨设备协同工作,推动智能生态的发展。
39 10
鸿蒙登录页面好看的样式设计-HarmonyOS应用开发实战与ArkTS代码解析【HarmonyOS 5.0(Next)】
|
23天前
|
PHP 开发者 容器
PHP命名空间深度解析:避免命名冲突与提升代码组织####
本文深入探讨了PHP中命名空间的概念、用途及最佳实践,揭示其在解决全局命名冲突、提高代码可维护性方面的重要性。通过生动实例和详尽分析,本文将帮助开发者有效利用命名空间来优化大型项目结构,确保代码的清晰与高效。 ####
21 1
|
1月前
|
机器学习/深度学习 存储 人工智能
强化学习与深度强化学习:深入解析与代码实现
本书《强化学习与深度强化学习:深入解析与代码实现》系统地介绍了强化学习的基本概念、经典算法及其在深度学习框架下的应用。从强化学习的基础理论出发,逐步深入到Q学习、SARSA等经典算法,再到DQN、Actor-Critic等深度强化学习方法,结合Python代码示例,帮助读者理解并实践这些先进的算法。书中还探讨了强化学习在无人驾驶、游戏AI等领域的应用及面临的挑战,为读者提供了丰富的理论知识和实战经验。
55 5
|
1月前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
144 10
|
1月前
|
前端开发 JavaScript 开发者
揭秘前端高手的秘密武器:深度解析递归组件与动态组件的奥妙,让你代码效率翻倍!
【10月更文挑战第23天】在Web开发中,组件化已成为主流。本文深入探讨了递归组件与动态组件的概念、应用及实现方式。递归组件通过在组件内部调用自身,适用于处理层级结构数据,如菜单和树形控件。动态组件则根据数据变化动态切换组件显示,适用于不同业务逻辑下的组件展示。通过示例,展示了这两种组件的实现方法及其在实际开发中的应用价值。
44 1
|
2月前
|
机器学习/深度学习 人工智能 算法
揭开深度学习与传统机器学习的神秘面纱:从理论差异到实战代码详解两者间的选择与应用策略全面解析
【10月更文挑战第10天】本文探讨了深度学习与传统机器学习的区别,通过图像识别和语音处理等领域的应用案例,展示了深度学习在自动特征学习和处理大规模数据方面的优势。文中还提供了一个Python代码示例,使用TensorFlow构建多层感知器(MLP)并与Scikit-learn中的逻辑回归模型进行对比,进一步说明了两者的不同特点。
105 2
|
2月前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
2月前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
2月前
|
SQL 监控 关系型数据库
SQL错误代码1303解析与处理方法
在SQL编程和数据库管理中,遇到错误代码是常有的事,其中错误代码1303在不同数据库系统中可能代表不同的含义

热门文章

最新文章

推荐镜像

更多