Dom4j解析XML学习代码

简介:

项目截图:注意导入红色方框内的两个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,如需转载请自行联系原作者

相关文章
|
11月前
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
311 57
|
6月前
|
算法 PyTorch 算法框架/工具
昇腾 msmodelslim w8a8量化代码解析
msmodelslim w8a8量化算法原理和代码解析
404 5
|
6月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `<appender>` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `<logger>` 和 `<root>` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
1405 1
|
4月前
|
机器学习/深度学习 数据采集 JavaScript
用深度学习提升DOM解析——自动提取页面关键区块
本文介绍了一次二手车数据爬虫事故的解决过程,从传统XPath方案失效到结合深度学习语义提取的成功实践。面对懂车帝平台的前端异步渲染和复杂DOM结构,通过Playwright动态渲染、代理IP隐藏身份,以及BERT模型对HTML块级语义识别,实现了稳定高效的字段提取。此方法抗结构变化能力强,适用于复杂网页数据采集,如二手车、新闻等领域。架构演进从静态爬虫到动态爬虫再到语义解析,显著提升效率与稳定性。
139 13
用深度学习提升DOM解析——自动提取页面关键区块
|
8月前
|
搜索推荐 UED Python
实现一个带有昼夜背景切换的动态时钟:从代码到功能解析
本文介绍了一个使用Python和Tkinter库实现的动态时钟程序,具有昼夜背景切换、指针颜色随机变化及整点和半点报时功能。通过设置不同的背景颜色和随机变换指针颜色,增强视觉吸引力;利用多线程技术确保音频播放不影响主程序运行。该程序结合了Tkinter、Pygame、Pytz等库,提供了一个美观且实用的时间显示工具。欢迎点赞、关注、转发、收藏!
355 94
|
6月前
|
域名解析 存储 缓存
深入学习 DNS 域名解析
在平时工作中相信大家都离不开 DNS 解析,因为 DNS 解析是互联网访问的第一步,无论是使用笔记本浏览器访问网络还是打开手机APP的时候,访问网络资源的第一步必然要经过DNS解析流程。
|
6月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
161 15
|
5月前
|
机器学习/深度学习 数据采集 存储
深度学习在DOM解析中的应用:自动识别页面关键内容区块
本文探讨了如何通过深度学习模型优化东方财富吧财经新闻爬虫的性能。针对网络请求、DOM解析与模型推理等瓶颈,采用代理复用、批量推理、多线程并发及模型量化等策略,将单页耗时从5秒优化至2秒,提升60%以上。代码示例涵盖代理配置、TFLite模型加载、批量预测及多线程抓取,确保高效稳定运行,为大规模数据采集提供参考。
|
6月前
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
238 5
|
7月前
|
人工智能 文字识别 自然语言处理
保单AI识别技术及代码示例解析
车险保单包含基础信息、车辆信息、人员信息、保险条款及特别约定等关键内容。AI识别技术通过OCR、文档结构化解析和数据校验,实现对保单信息的精准提取。然而,版式多样性、信息复杂性、图像质量和法律术语解析是主要挑战。Python代码示例展示了如何使用PaddleOCR进行保单信息抽取,并提出了定制化训练、版式分析等优化方向。典型应用场景包括智能录入、快速核保、理赔自动化等。未来将向多模态融合、自适应学习和跨区域兼容性发展。

热门文章

最新文章

推荐镜像

更多
  • DNS