当前位置: 首页 > news >正文

[Java]_[初级]_[使用SAX流的方式写入XML文件]

场景

  1. 文件的写入目前没有发现可以增量写入的,只能是完全重新写入。对于大量数据需要写入XML文件,还是和读XML文件一样,不需要生成DOM模型能节省不少的内存和指令。

说明

  1. java标准库里,也是有相关的SAX类来写入数据流,StreamResult(OutputStream)负责把数据写入输出流。
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;FileOutputStream fo = new FileOutputStream(file);
StreamResult streamResult = new StreamResult(fo);
  1. 之后创建一个TransformerHandler来负责绑定StreamResult并开始写入元素名称,元素值,属性值,子元素等。

  2. Handler还可以设置输出是否带缩进,输出的编码格式。

例子

  1. 这里例子是生成sitemap.xml文件,这里的SitemapMap对象。SitemapReader

SitemapWriter


import Sitemap;
import StringUtils;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.List;public class SitemapWriter {public boolean writeToFile(File file, List<Sitemap> sitemaps){SAXTransformerFactory factory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();URL resource = this.getClass().getResource("/");String path = resource.getPath();boolean result = false;try(FileOutputStream fo = new FileOutputStream(file);) {TransformerHandler handler = factory.newTransformerHandler();Transformer transformer = handler.getTransformer();transformer.setOutputProperty(OutputKeys.INDENT, "yes");transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");StreamResult streamResult = new StreamResult(fo);handler.setResult(streamResult);handler.startDocument();AttributesImpl attributes = new AttributesImpl();attributes.addAttribute("","","xmlns","","http://www.sitemaps.org/schemas/sitemap/0.9");attributes.addAttribute("","","xmlns:xhtml","","http://www.w3.org/1999/xhtml");handler.startElement("", "", "urlset", attributes);attributes.clear();// urlfor (int i = 0; i < sitemaps.size(); i++) {Sitemap one = sitemaps.get(i);handler.startElement("","","url",null);handler.startElement("","","loc",null);String loc = StringUtils.nullToEmpty(one.getStr("loc"));handler.characters(loc.toCharArray(), 0, loc.length());handler.endElement("","","loc");handler.startElement("","","priority",null);String priority = StringUtils.nullToEmpty(one.getStr("priority"));handler.characters(priority.toCharArray(), 0, priority.length());handler.endElement("","","priority");handler.startElement("","","lastmod",null);String lastmod = StringUtils.nullToEmpty(one.getStr("lastmod"));handler.characters(lastmod.toCharArray(), 0, lastmod.length());handler.endElement("","","lastmod");handler.startElement("","","changefreq",null);String changefreq = StringUtils.nullToEmpty(one.getStr("changefreq"));handler.characters(changefreq.toCharArray(), 0, changefreq.length());handler.endElement("","","changefreq");handler.endElement("","","url");}handler.endElement("","","urlset");handler.endDocument();result = true;} catch (TransformerConfigurationException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();}return result;}
}

TestSitemapWriter

import Sitemap;
import SitemapReader;
import SitemapWriter;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;import javax.xml.transform.sax.SAXTransformerFactory;
import java.io.File;
import java.net.URL;
import java.util.List;@RunWith(JUnit4.class)
public class TestSitemapWriter {@Testpublic void testSitemapWriter(){SAXTransformerFactory factory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();URL resource = this.getClass().getResource("/");String path = resource.getPath();File file = new File(path+"..\\..\\..\\..\\doc\\tests\\xml\\sitemap.xml");SitemapReader sr = new SitemapReader();if(sr.readAll(file)){List<Sitemap> sitemaps = sr.getSitemaps();file = new File(path+"\\sitemap.xml");SitemapWriter writer = new SitemapWriter();writer.writeToFile(file,sitemaps);}}
}

参考

  1. Java——SAX方式生成XML

  2. SAXTransformerFactory

  3. 以SAX流的方式高效读取XML大文件

相关文章:

[Java]_[初级]_[使用SAX流的方式写入XML文件]

场景 文件的写入目前没有发现可以增量写入的&#xff0c;只能是完全重新写入。对于大量数据需要写入XML文件&#xff0c;还是和读XML文件一样&#xff0c;不需要生成DOM模型能节省不少的内存和指令。 说明 在java标准库里&#xff0c;也是有相关的SAX类来写入数据流&#xf…...

java里面封装https请求工具类

1.工具类如下 Component Slf4j public class RestClientUtil<T> {private final RestTemplate restTemplate;public RestClientUtil() {this.restTemplate new RestTemplate();}public JSONObject uploadFile(String url, String fileUrl) throws IOException {List<…...

uniApp常见面试题-附详细答案

uniApp中如何进行页面跳转&#xff1f; 答案&#xff1a;可以使用uni.navigateTo、uni.redirectTo和uni.reLaunch等方法进行页面跳转。其中&#xff0c;uni.navigateTo可以实现页面的普通跳转&#xff0c;uni.redirectTo可以实现页面的重定向跳转&#xff0c;uni.reLaunch可以实…...

Java“牵手”1688整店商品API接口数据,通过店铺ID获取整店商品详情数据,1688店铺所有商品API申请指南

1688平台店铺所有商品数据接口是开放平台提供的一种API接口&#xff0c;通过调用API接口&#xff0c;开发者可以获取1688整店的商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片、价格信息等详细信息 。 获取店铺所有商品接口API是一种用于获取电商平台上商品详…...

数据进制的转换

其他进制转换为十进制 通过按权展开法转换 十进制转换为其他进制 通过短除法转换&#xff08;注意计算结果是倒着的&#xff09; 例如将十进制的94转换为二进制 二进制转八进制和十六进制 3位二进制数表示1位八进制数&#xff0c;4位二进制数表示1位十六进制数 同理八进制数…...

如何分析识别文章/内容中高频词和关键词?

theme: orange 要分析一篇文章的高频词和关键词&#xff0c;可以使用 Python 中的 nltk 库和 collections 库或者jieba库来实现&#xff0c;本篇文章介绍基于两种库分别实现分析内容中的高频词和关键词。 nltk 和 collections 库 首先&#xff0c;需要安装 nltk 库和 collectio…...

Windows7安装SSH客户端的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

力扣:81. 搜索旋转排序数组 II(Python3)

题目&#xff1a; 已知存在一个按非降序排列的整数数组 nums &#xff0c;数组中的值不必互不相同。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转 &#xff0c;使数组变为 [nums[k], nums[k1], .…...

TCP IP网络编程(三) 地址族与数据序列

文章目录 分配给套接字的IP地址与端口号网络地址网络地址分类与主机地址边界 地址信息的表示表示 IPv4地址的结构体结构体sockaddr_in 的成员分析 网络字节序与地址变换字节序与网络字节序字节序转换 网络地址的初始化与分配将字符串信息转换为网络字节序的整数型网络地址初始化…...

对比Flink、Storm、Spark Streaming 的反压机制

分析&回答 Flink 反压机制 Flink 如何处理反压? Storm 反压机制 Storm反压机制 Storm 在每一个 Bolt 都会有一个监测反压的线程&#xff08;Backpressure Thread&#xff09;&#xff0c;这个线程一但检测到 Bolt 里的接收队列&#xff08;recv queue&#xff09;出现了…...

Ubuntu常用配置集合

Ubuntu配置软件镜像源 参考文章&#xff1a;Ubuntu如何配置软件镜像源 建议使用清华的源。 Ubuntu安装SSH服务&#xff1a; 参考文章&#xff1a;Ubuntu安装SSH服务 ubuntu下安装使用nvm 参考文章&#xff1a;ubuntu下安装使用nvm 出现下载sh文件不成功的情况&#xff0c;…...

传统三维重建和深度学习三维重建 MVS笔记总结、问题总结

什么是cost-volume ?(代价体) 什么是置信度?置信区间? pixel-wise,patch-wise,image-wise的区别 图像 4领域-8领域-16领域 及代码实现 文章目录 1 plane-sweeping2 传统三维重建深度学习三维重建有何不同呢?3 大型场景重建4 PMVS-精确、密集、鲁棒的多视图立体视觉…...

Ansible学习笔记10

1、在group1的被管理机里的mariadb里创建一个abc库&#xff1b; 1&#xff09; 然后我们到agent主机上进行检查&#xff1a; 可以看到数据库已经创建成功。 再看几个其他命令&#xff1a; #a组主机重启mysql&#xff0c;并设置开机自启 ansible a -m service -a "namemy…...

肖sir__linux详解__002(系统命令)

linux系统命令 1、df 查看磁盘使用情况 &#xff08;1&#xff09;df 查看磁盘使用情况&#xff08;按kb单位显示&#xff09; &#xff08;2&#xff09;df -h 按单位显示磁盘使用情况 2、top 实时查看动态进程 &#xff08;1&#xff09;top 详解&#xff1a; 第一行&…...

AI绘画:StableDiffusion实操教程-斗罗大陆2-江楠楠-常服(附高清图下载)

前段时间我分享了StableDiffusion的非常完整的教程&#xff1a;“AI绘画&#xff1a;Stable Diffusion 终极宝典&#xff1a;从入门到精通 ” 尽管如此&#xff0c;还有读者反馈说&#xff0c;尽管已经成功安装&#xff0c;但生成的图片与我展示的结果相去甚远。真实感和质感之…...

JavaScript运行机制与实践应用

一、JavsScript运行机制 1、JavaScript 是一种解释型语言&#xff0c;它的执行机制主要包括以下几个步骤&#xff1a; 2、事件循环 3、JavaScript运行模型 4、JavaScript任务 5、JavaScript宏任务和微任务 6、案例分析 console.log(script start) setTimeout(function () {co…...

【算法奥义】最大矩形问题

首先建立一个二维数组&#xff0c;这个二维数组&#xff0c;计算出矩阵的每个元素的左边连续 1 的数量&#xff0c;使用二维数组 left记录&#xff0c;其中left[i][j] 为矩阵第 i 行第 j 列元素的左边连续 1 的数量。 也就是从这个元素开始&#xff0c;从右往左边数有多少个连…...

06 Kafka线上集群部署方案

kafka部署在linux上有什么好处 网络传输效率 kafka部署在linux上&#xff0c;可以用到linux的零拷贝提升网络传输效率&#xff0c;提高kafka的吞吐量。利用零拷贝可以使数据不经过用户态直接通过网卡发送给接收方&#xff0c;实现数据的高性能传输 kafka和零拷贝技术 kafka…...

flex-shrink计算题

当我们使用 flexbox 布局时&#xff0c;flex-shrink 属性用于指定 flex 项在空间不足时收缩的比例。它表示了一个 flex 项相对于其他 flex 项收缩的比例。 假设有一个 flex 容器&#xff0c;其中包含三个子项&#xff0c;它们的 flex-shrink 分别设置为 1、2 和 3。当容器的可…...

Springboot - 5.Bean的生命周期

✍1. Bean的生命周期&#xff1a; 当然&#xff0c;我会详细描述每一步的作用。 &#x1f3b7;1. 实例化Bean: 这是Bean生命周期的第一步。Spring容器通过反射机制创建Bean的实例。public class ExampleBean {// ... }&#x1f3b7;2. 设置Bean的属性: Spring容器将根据配置…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...