JAVA |日常开发中读写XML详解

在这里插入图片描述
在这里插入图片描述

JAVA |日常开发中读写XML详解

  • 前言
  • 一、XML 简介
  • 二、在 Java 中读取 XML
    • 2.1 使用 DOM(Document Object Model)方式读取 XML
    • 2.2 使用 SAX(Simple API for XML)方式读取 XML
  • 三、在 Java 中写入 XML
    • 3.1 使用 DOM 方式写入 XML
  • 结束语
  • 优质源码分享

JAVA |日常开发中读写XML详解,以下是 Java 日常开发中常见问题的归纳讲解:语法错误相关问题,数据类型相关问题,面向对象编程相关问题,集合类相关问题,文件操作和输入输出相关问题等详解,内有代码示例。

前言

        在数字浪潮汹涌澎湃的时代,程序开发宛如一座神秘而宏伟的魔法城堡,矗立在科技的浩瀚星空中。代码的字符,似那闪烁的星辰,按照特定的轨迹与节奏,组合、交织、碰撞,即将开启一场奇妙且充满无限可能的创造之旅。当空白的文档界面如同深邃的宇宙等待探索,程序员们则化身无畏的星辰开拓者,指尖在键盘上轻舞,准备用智慧与逻辑编织出足以改变世界运行规则的程序画卷,在 0 和 1 的二进制世界里,镌刻下属于人类创新与突破的不朽印记。

一、XML 简介

    XML(eXtensible Markup Language)是一种可扩展标记语言,它被设计用来传输和存储数据。XML 的结构类似于 HTML,都是由标签组成,但 XML 的标签是可以自定义的,这使得它具有很强的灵活性。

  • 例如,一个简单的 XML 文件可以用来存储书籍信息:
<?xml version="1.0" encoding="UTF-8"?>
<bookstore><book category="cooking"><title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price></book>
</bookstore>

    在这个例子中,<?xml version="1.0" encoding="UTF-8"?>是 XML 的声明,它定义了 XML 的版本和编码方式。是根元素,是子元素,并且元素有一个属性category。

二、在 Java 中读取 XML

2.1 使用 DOM(Document Object Model)方式读取 XML

    DOM 方式会将整个 XML 文档加载到内存中,形成一个树形结构,然后可以通过遍历这个树形结构来获取 XML 中的数据。

    首先,需要导入相关的 Java XML 库。在 Java 中,主要是org.w3c.dom和javax.xml.parsers包。

  • 以下是一个简单的读取 XML 文件并获取其中书籍标题的示例代码:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.io.File;public class ReadXMLWithDOM {public static void main(String[] args) {try {File xmlFile = new File("books.xml");DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();Document doc = dBuilder.parse(xmlFile);doc.getDocumentElement().normalize();NodeList nList = doc.getElementsByTagName("book");for (int i = 0; i < nList.getLength(); i++) {Node nNode = nList.item(i);if (nNode.getNodeType() == Node.ELEMENT_NODE) {Element eElement = (Element) nNode;System.out.println("Book title: " + eElement.getElementsByTagName("title").item(0).getTextContent());}}} catch (Exception e) {e.printStackTrace();}}
}

    上述代码首先创建一个DocumentBuilderFactory对象,然后使用它创建一个DocumentBuilder。通过DocumentBuilder的parse方法将 XML 文件解析为一个Document对象。Document对象代表了整个 XML 文档的树形结构。通过getElementsByTagName方法可以获取具有指定标签名的节点列表,然后遍历这个列表来获取每个元素中的元素的文本内容。

2.2 使用 SAX(Simple API for XML)方式读取 XML

    SAX 是一种基于事件驱动的 XML 解析方式。它不会将整个 XML 文档加载到内存中,而是在解析 XML 文档的过程中,当遇到特定的 XML 结构(如开始标签、结束标签、文本内容等)时,会触发相应的事件,通过定义事件处理器来处理这些事件,从而获取 XML 中的数据。
要使用 SAX,需要实现org.xml.sax.ContentHandler接口来定义事件处理器。以下是一个简单的示例,用于统计 XML 文件中书籍的数量:

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.File;public class ReadXMLWithSAX {public static void main(String[] args) {try {File xmlFile = new File("books.xml");SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser saxParser = factory.newSAXParser();MyHandler handler = new MyHandler();saxParser.parse(xmlFile, handler);System.out.println("Number of books: " + handler.getBookCount());} catch (Exception e) {e.printStackTrace();}}
}class MyHandler extends DefaultHandler {private int bookCount = 0;@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {if (qName.equalsIgnoreCase("book")) {bookCount++;}}public int getBookCount() {return bookCount;}
}

    在这个示例中,MyHandler类继承自DefaultHandler,并重写了startElement方法。当 SAX 解析器遇到开始标签时,会调用startElement方法。如果遇到标签,就会将bookCount加 1。最后,通过getBookCount方法获取书籍的数量。

三、在 Java 中写入 XML

3.1 使用 DOM 方式写入 XML

  • 以下是一个简单的示例,用于创建一个新的 XML 文件并写入书籍信息:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;public class WriteXMLWithDOM {public static void main(String[] args) {try {DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();Document doc = dBuilder.newDocument();Element bookstore = doc.createElement("bookstore");doc.appendChild(bookstore);Element book = doc.createElement("book");bookstore.appendChild(book);Element title = doc.createElement("title");title.setTextContent("New Book");book.appendChild(title);TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();DOMSource source = new DOMSource(doc);StreamResult result = new StreamResult(new File("new_books.xml"));transformer.transform(source, result);} catch (Exception e) {e.printStackTrace();}}
}

    首先,通过DocumentBuilder创建一个新的Document对象。然后,使用createElement方法创建 XML 元素,并使用appendChild方法将元素添加到文档树中。设置好元素的文本内容后,通过Transformer将Document对象转换为 XML 文件并保存到磁盘上。
使用 JAXB(Java Architecture for XML Binding)方式写入 XML
JAXB 提供了一种将 Java 对象与 XML 数据进行相互转换的机制。首先需要定义 Java 类来对应 XML 的结构。

  • 假设我们有一个Book类和一个Bookstore类来对应上面的 XML 结构:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.util.ArrayList;
import java.util.List;class Book {private String title;private String author;private int year;private double price;// 构造函数、getter和setter方法省略
}class Bookstore {private List<Book> books = new ArrayList<>();public void addBook(Book book) {books.add(book);}// 其他方法省略
}
  • 以下是使用 JAXB 将Bookstore对象转换为 XML 并保存的示例代码:
public class WriteXMLWithJAXB {public static void main(String[] args) {try {Bookstore bookstore = new Bookstore();Book book = new Book();book.setTitle("Another New Book");book.setAuthor("New Author");book.setYear(2024);book.setPrice(35.0);bookstore.addBook(book);JAXBContext jaxbContext = JAXBContext.newInstance(Bookstore.class);Marshaller jaxbMarshaller = jaxbContext.createMarshaller();jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);jaxbMarshaller.marshal(bookstore, new File("jaxb_books.xml"));} catch (JAXBException e) {e.printStackTrace();}}
}

    在这个示例中,首先创建了Bookstore和Book对象,并设置了相关属性。然后通过JAXBContext和Marshaller将Bookstore对象转换为 XML 格式并保存到文件中。setProperty方法用于设置输出格式为格式化后的 XML。

结束语

        亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

         愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

        至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


--------------- 业精于勤,荒于嬉 ---------------

请添加图片描述

--------------- 行成于思,毁于随 ---------------

优质源码分享

  • 【百篇源码模板】html5各行各业官网模板源码下载

  • 【模板源码】html实现酷炫美观的可视化大屏(十种风格示例,附源码)

  • 【VUE系列】VUE3实现个人网站模板源码

  • 【HTML源码】HTML5小游戏源码

  • 【C#实战案例】C# Winform贪吃蛇小游戏源码


在这里插入图片描述


     💞 关注博主 带你实现畅游前后端

     🏰 大屏可视化 带你体验酷炫大屏

     💯 神秘个人简介 带你体验不一样得介绍

     🎀 酷炫邀请函 带你体验高大上得邀请


     ① 🉑提供云服务部署(有自己的阿里云);
     ② 🉑提供前端、后端、应用程序、H5、小程序、公众号等相关业务;
     如🈶合作请联系我,期待您的联系。
    :本文撰写于CSDN平台,作者:xcLeigh所有权归作者所有) ,https://blog.csdn.net/weixin_43151418,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


     亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌


原文地址:https://blog.csdn.net/weixin_43151418/article/details/144189058(防止抄袭,原文地址不可删除)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/62861.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ISAAC SIM踩坑记录--Omniverse Launcher添加代理

最近Omniverse Launcher不知道又抽什么疯&#xff0c;在Exchange界面安装各种软件都不成功&#xff0c;报错如下&#xff1a; FetchError: request to https://launcher-index-prod.s3.amazonaws.com/en/components.json failed, reason: Client network socket disconnected…

ECharts柱状图-交错正负轴标签,附视频讲解与代码下载

引言&#xff1a; 在数据可视化的世界里&#xff0c;ECharts凭借其丰富的图表类型和强大的配置能力&#xff0c;成为了众多开发者的首选。今天&#xff0c;我将带大家一起实现一个柱状图图表&#xff0c;通过该图表我们可以直观地展示和分析数据。此外&#xff0c;我还将提供…

07《缓存》计算机组成与体系结构 系列课

目录 深入了解缓存内存 缓存的重要性 游戏中的存储需求与主内存 虚拟内存和按需分页 现代系统中的多级缓存 缓存级别的大小与速度 缓存相关的术语 缓存命中与未命中 页面命中与缺页 局部性原理 结语 深入了解缓存内存 大家好&#xff0c;欢迎来到今天的课程。上节课…

FPGA实战篇(触摸按键控制LED灯)

1.触摸按键简介 触摸按键主要可分为四大类&#xff1a;电阻式、电容式、红外感应式以及表面声波式。根据其属性的不同&#xff0c;每种触摸按键都有其合适的使用领域。 电阻式触摸按键由多块导电薄膜按照按键的位置印制而成&#xff0c;但由于耐用性较差且维护复杂&#xff0c…

java基础概念47-ArrayList、LinkList和迭代器

一、ArrayList集合 1-1、ArrayList的两种添加信息的方式 1-2、ArrayList集合底层逻辑 1、利用空参创建的集合&#xff0c;在底层创建一个默认长度为0的数组 2、添加第一个元素时&#xff0c;底层会创建一个新的长度为10的数组 3、存满时&#xff0c;会扩容1.5倍。 4、如果…

C++学习日记---第16天

笔记复习 1.C对象模型 在C中&#xff0c;类内的成员变量和成员函数分开存储 我们知道&#xff0c;C中的成员变量和成员函数均可分为两种&#xff0c;一种是普通的&#xff0c;一种是静态的&#xff0c;对于静态成员变量和静态成员函数&#xff0c;我们知道他们不属于类的对象…

Java基础之网络编程:开启网络通信的神秘之门

一、网络编程概述 网络编程是通过计算机网络进行数据传输和通信的编程技术&#xff0c;在 Java 中&#xff0c;我们可以使用丰富的网络编程功能和 API 来实现不同计算机之间的数据交互。 Java 网络编程是指在 Java 语言中使用网络协议和 API 进行网络通信的编程技术。Java 网络…

Go 语言函数编程指南:定义、调用技巧与返回值机制

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Go语言探索之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Go语言简介 2、Go语言的特点 二、函数定义 1、Go语言函数定义 2、函…

在办公室环境中用HMD替代传统显示器的优势

VR头戴式显示器&#xff08;HMD&#xff09;是进入虚拟现实环境的一把钥匙&#xff0c;拥有HMD的您将能够在虚拟现实世界中尽情探索未知领域&#xff0c;正如如今的互联网一样&#xff0c;虚拟现实环境能够为您提供现实中无法实现的或不可能实现的事。随着技术的不断进步&#…

Springboot项目中子模块maven层级不一致的问题

&#xff08;一&#xff09;问题描述 campus-common、campus-pojo、campus-server都是campus-flower-system的子模块&#xff0c;但是只有campus-common在campus-flower-system下 &#xff08;二&#xff09;解决方法 打开父工程&#xff08;我这里是campus-flower-system&…

SpringBoot 架构下的在线家具商城:规划与实践之路

第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广泛运用&#xff0c;以及各种计算机硬件的完善和升…

【阅读笔记】Android广播的处理流程

关于Android的解析&#xff0c;有很多优质内容&#xff0c;看了后记录一下阅读笔记&#xff0c;也是一种有意义的事情&#xff0c; 今天就看看“那个写代码的”这位大佬关于广播的梳理&#xff0c; https://blog.csdn.net/a572423926/category_11509429.html https://blog.c…

【C++boost::asio网络编程】有关异步读写api的笔记

异步读写api 异步写操作async_write_someasync_send 异步读操作async_read_someasync_receive 定义一个Session类&#xff0c;主要是为了服务端专门为客户端服务创建的管理类 class Session { public:Session(std::shared_ptr<asio::ip::tcp::socket> socket);void Conn…

Proteus8.17下载安装教程

Proteus是一款嵌入式系统仿真开发软件&#xff0c;实现了从原理图设计、单片机编程、系统仿真到PCB设计&#xff0c;真正实现了从概念到产品的完整设计&#xff0c;其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等&#xff0c;能够帮助用…

frp 内网穿透

文章目录 前言使用自己的服务器搭建frp 这里服务器是linux centos 7 宝塔&#xff0c;client是 windows10 https://github.com/fatedier/frp/releases/tag/v0.53.2 版本下载分客户端与服务端 一、frp是什么&#xff1f;二、使用步骤1.部署服务器端2.客户端 前言 使用自己的服务…

大数据-239 离线数仓 - 广告业务 测试 FlumeAgent 加载ODS、DWD层

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

基于 SpringBoot 开发在线家具商城:设计架构与实践流程

第3章 系统分析 用户的需求以及与本系统相似的在市场上存在的其它系统可以作为系统分析中参考的资料&#xff0c;分析人员可以根据这些信息确定出本系统具备的功能&#xff0c;分析出本系统具备的性能等内容。 3.1可行性分析 尽管系统是根据用户的要求进行制作&#xff0c;但是…

【Django-xadmin】

时间长不用,会忘的系列 1、Django-xadmin后台字段显示处理 主要是修改每个模块下adminx.py文件 代码解释&#xff1a;第1行控制表单字段显示第2行控制列表字段显示第3行控制搜索条件第4行控制过滤条件第5行支持单个或多个字段信息修改第6行列表分页&#xff0c;每页显示多少行…

【HM-React】02. React基础-下

React表单控制 受控绑定 概念&#xff1a;使用React组件的状态&#xff08;useState&#xff09;控制表单的状态 function App(){const [value, setValue] useState()return (<input type"text" value{value} onChange{e > setValue(e.target.value)}/>) …

朗迪锋亮相2024人因工程与智能系统交互国际会议

2024年11月28日至30日&#xff0c;2024人因工程与智能系统交互国际会议在深圳隆重举办。此次大会以推动我国人因工程学科发展为目标&#xff0c;致力于加强国际学术交流&#xff0c;深入探讨人工智能时代的智能系统交互&#xff0c;旨在培育新质生产力&#xff0c;助力经济社会…