Dom4j工具--XML的DOM解析(下)--写操作

简介:

前言:

上一篇博客我开始了用Dom4j对XML进行了读操作,这篇博客主要是进行对XML的写操作  
只涉及基础的内容,只要有javase基础和eclipse的使用 就可以完成,  
往后的内容包括  “框架”  我都还没学到,所以本文中的内容也都是局限于基础部分

有兴趣的可以参考Dom4j工具--XML的DOM解析(上)--读操作
也可以参考DOM4J官网
还可以查看DOM4J API

目录:

1. 如何写内容到XML
2. 增:文档,标签,属性,文本内容
3. 改:属性值,文本
4. 删:标签,属性

现在开始正文。

如何写内容到XML:

这一步是所有操作的前提,也是入门的必要操作

简单举个栗子:
实现对一个xml文档的粘贴复制功能

    @Test
    public void test2() throws Exception {
        // 1.读取xml文档,返回Document对象
        SAXReader reader = new SAXReader();
        Document doc = reader.read(new File(".\\src\\day33\\ss.xml"));
        FileOutputStream fileOutputStream=new FileOutputStream("D:\\xx.xml");
        
        OutputFormat outputFormat1=OutputFormat.createCompactFormat();
        OutputFormat outputFormat2=OutputFormat.createPrettyPrint();
        outputFormat2.setEncoding("UTF-8");
        
        XMLWriter xmlWriter=new XMLWriter(fileOutputStream,outputFormat2);
        xmlWriter.write(doc);
        xmlWriter.close();
    }

结果:
createCompactFormat():

<?xml version="1.0" encoding="UTF-8"?>
<constant><cons><name>hello1</name></cons><name>hello2</name><cons><name>hello3</name></cons></constant>

createPrettyPrint():

<?xml version="1.0" encoding="UTF-8"?>

<constant> 
  <cons> 
    <name>hello1</name> 
  </cons>  
  <name>hello2</name>  
  <cons> 
    <name>hello3</name> 
  </cons> 
</constant>

注意:

  1. @Test可以忽略 因为涉及到注解和单元测试,想了解单元测试的可以参考一下这篇:
    单元测试--JUnit4了解一下(eclipse环境)
  2. XMLWriter导入的时候注意头文件别错了 是:import org.dom4j.io.XMLWriter;
  3. 这里使用FileOutputStream 而不是Writer字符流 因为防止考虑编码
  4. 记得最后要关闭流。
  5. createCompactFormat():紧凑的结构 去除空格和换行,项目上线 因为xml更小
  6. createPrettyPrint(): 漂亮的结构 有空格和换行,开发调试
    outputFormat2.setEncoding("UTF-8");是指定保存的编码格式为UTF-8

修改:
outputFormat2.setEncoding("GBK");内容是中文的话 就会出现乱码
outputFormat2.setEncoding会使得 保存的编码格式和文档声明一致 即


<?xml version="1.0" encoding="GBK"?>

增:文档,标签,属性,文本内容:

DocumentHelper.createDocument() 增加文档
addElement("名称") 增加标签
addAttribute("名称",“值”) 增加属性
addText(“内容”) 增加文本内容

源代码:

@Test
    public void test2() throws Exception {
        
        FileOutputStream fileOutputStream=new FileOutputStream("D:\\xx.xml");
        
        Document doc=DocumentHelper.createDocument();//创建文档
        Element element=doc.addElement("age1");      //创建标签
        element.addAttribute("id", "12");            //创建属性
        element.addText("Text");                     //创建文本文件
        
        OutputFormat outputFormat2=OutputFormat.createPrettyPrint();
        outputFormat2.setEncoding("UTF-8");
        XMLWriter xmlWriter=new XMLWriter(fileOutputStream,outputFormat2);
        xmlWriter.write(doc);
        xmlWriter.close();
    }

注意:
Element element=doc.addElement("age1");不能重复插入,因为只有一个根标签

修改:属性值,文本:

Attribute.setValue("值")  修改属性值
Element.addAtribute("同名的属性名","值")  修改同名的属性值
Element.setText("内容")  修改文本内容
    @Test
    public void test2() throws Exception {
        // 1.读取xml文档,返回Document对象
        SAXReader reader = new SAXReader();
        Document doc = reader.read(new File(".\\src\\day33\\ss.xml"));
        FileOutputStream fileOutputStream=new FileOutputStream("D:\\xx.xml");
        
        //获取标签对象
        Element element=doc.getRootElement();
        Element elementSon=element.element("cons");
        
        //修改属性值
        elementSon.addAttribute("id", "12");            // 通过增加同名属性的方法,修改属性值
        Attribute attribute=elementSon.attribute("id"); // 获取属性对象 修改属性值值
        attribute.setValue("13");;
        
        elementSon.setText("修改1");                     //修改文本内容
        
        
        OutputFormat outputFormat2=OutputFormat.createPrettyPrint();
        outputFormat2.setEncoding("UTF-8");
        XMLWriter xmlWriter=new XMLWriter(fileOutputStream,outputFormat2);
        xmlWriter.write(doc);
        xmlWriter.close();
    }

注意:cons标签下先文本后name标签,如果修改cons文本内容后 ,文本会下移到name标签下。似乎没啥大影响

删:标签,属性:

Element.detach();  删除标签  
Attribute.detach();  删除属性

源代码:

@Test
    public void test2() throws Exception {
        // 1.读取xml文档,返回Document对象
        SAXReader reader = new SAXReader();
        Document doc = reader.read(new File(".\\src\\day33\\ss.xml"));
        FileOutputStream fileOutputStream=new FileOutputStream("D:\\xx.xml");
        
        //获取标签对象
        Element element=doc.getRootElement();
        Element elementSon=element.element("cons");
        
        //获取到cons下第一个标签节点并且删除
        elementSon.elements().get(0).detach();
        
        //获取到cons标签的属性为id的属性对象,然后删除
        Attribute idAttribute=elementSon.attribute("id");
        idAttribute.detach();
        
        
        OutputFormat outputFormat2=OutputFormat.createPrettyPrint();
        outputFormat2.setEncoding("UTF-8");
        XMLWriter xmlWriter=new XMLWriter(fileOutputStream,outputFormat2);
        xmlWriter.write(doc);
        xmlWriter.close();
    }
目录
相关文章
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
498 57
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2895 1
|
5月前
|
XML 数据采集 API
用Lxml高效解析XML格式数据:以天气API为例
免费Python教程:实战解析中国天气网XML数据,详解Lxml库高效解析技巧、XPath用法、流式处理大文件及IP封禁应对策略,助你构建稳定数据采集系统。
339 0
|
10月前
|
机器学习/深度学习 数据采集 JavaScript
用深度学习提升DOM解析——自动提取页面关键区块
本文介绍了一次二手车数据爬虫事故的解决过程,从传统XPath方案失效到结合深度学习语义提取的成功实践。面对懂车帝平台的前端异步渲染和复杂DOM结构,通过Playwright动态渲染、代理IP隐藏身份,以及BERT模型对HTML块级语义识别,实现了稳定高效的字段提取。此方法抗结构变化能力强,适用于复杂网页数据采集,如二手车、新闻等领域。架构演进从静态爬虫到动态爬虫再到语义解析,显著提升效率与稳定性。
362 13
用深度学习提升DOM解析——自动提取页面关键区块
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
471 15
|
11月前
|
机器学习/深度学习 数据采集 存储
深度学习在DOM解析中的应用:自动识别页面关键内容区块
本文探讨了如何通过深度学习模型优化东方财富吧财经新闻爬虫的性能。针对网络请求、DOM解析与模型推理等瓶颈,采用代理复用、批量推理、多线程并发及模型量化等策略,将单页耗时从5秒优化至2秒,提升60%以上。代码示例涵盖代理配置、TFLite模型加载、批量预测及多线程抓取,确保高效稳定运行,为大规模数据采集提供参考。
298 0
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
JavaScript 前端开发 算法
React 虚拟 DOM 深度解析
【10月更文挑战第5天】本文深入解析了 React 虚拟 DOM 的工作原理,包括其基础概念、优点与缺点,以及 Diff 算法的关键点。同时,分享了常见问题及解决方法,并介绍了作者在代码/项目上的成就和经验,如大型电商平台的前端重构和开源贡献。
267 3
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
326 0

热门文章

最新文章

推荐镜像

更多
  • DNS