Java中如何处理XML数据?

Java中如何处理XML数据?

大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨在Java中如何高效处理XML数据的技术和最佳实践。XML(可扩展标记语言)作为一种通用的数据交换格式,在Java应用程序中广泛使用,例如配置文件、数据传输等场景。本文将带你从基础到进阶,掌握在Java中处理XML的各种方法和工具。

1. XML基础概念

XML是一种标记语言,使用标签来描述数据结构。一个简单的XML示例:

<bookstore><book category="cooking"><title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price></book><book category="children"><title lang="en">Harry Potter</title><author>J.K. Rowling</author><year>2005</year><price>29.99</price></book>
</bookstore>

2. Java中处理XML的方法

在Java中,处理XML数据通常涉及解析、生成和操作XML文档。主要的XML处理方式包括:

  • DOM(Document Object Model):将整个XML文档加载到内存中的树形结构,适合于对XML结构进行频繁访问和修改的场景。

  • SAX(Simple API for XML):基于事件驱动的XML解析方式,逐行解析XML文档,适合处理大型XML文件和一次性读取的场景。

  • JAXB(Java Architecture for XML Binding):通过Java类和XML之间的映射,实现XML和Java对象之间的相互转换。

3. 使用DOM解析XML

DOM解析器将整个XML文档加载到内存中,可以通过操作文档对象树(Document Object Model)来访问和修改XML数据。

示例:使用DOM解析XML并读取数据
package cn.juwatech.xml;import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;public class DomParserExample {public static void main(String[] args) {try {File xmlFile = new File("books.xml");DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.parse(xmlFile);// 获取根元素Element root = doc.getDocumentElement();// 获取所有book元素NodeList bookList = root.getElementsByTagName("book");// 遍历book元素for (int i = 0; i < bookList.getLength(); i++) {Element book = (Element) bookList.item(i);String category = book.getAttribute("category");String title = book.getElementsByTagName("title").item(0).getTextContent();String author = book.getElementsByTagName("author").item(0).getTextContent();int year = Integer.parseInt(book.getElementsByTagName("year").item(0).getTextContent());double price = Double.parseDouble(book.getElementsByTagName("price").item(0).getTextContent());System.out.println("Book: " + title);System.out.println("  Category: " + category);System.out.println("  Author: " + author);System.out.println("  Year: " + year);System.out.println("  Price: $" + price);System.out.println();}} catch (Exception e) {e.printStackTrace();}}
}

4. 使用SAX解析XML

SAX解析器基于事件驱动模型,逐行读取XML文档,通过回调方法处理XML的各个部分,适合处理大型XML文件和一次性读取的场景。

示例:使用SAX解析XML
package cn.juwatech.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 SaxParserExample {public static void main(String[] args) {try {File xmlFile = new File("books.xml");SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser saxParser = factory.newSAXParser();DefaultHandler handler = new DefaultHandler() {boolean bTitle = false;boolean bAuthor = false;boolean bYear = false;boolean bPrice = false;public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {if (qName.equalsIgnoreCase("title")) {bTitle = true;} else if (qName.equalsIgnoreCase("author")) {bAuthor = true;} else if (qName.equalsIgnoreCase("year")) {bYear = true;} else if (qName.equalsIgnoreCase("price")) {bPrice = true;}}public void characters(char[] ch, int start, int length) throws SAXException {if (bTitle) {System.out.println("Book: " + new String(ch, start, length));bTitle = false;} else if (bAuthor) {System.out.println("  Author: " + new String(ch, start, length));bAuthor = false;} else if (bYear) {System.out.println("  Year: " + new String(ch, start, length));bYear = false;} else if (bPrice) {System.out.println("  Price: $" + new String(ch, start, length));bPrice = false;}}};saxParser.parse(xmlFile, handler);} catch (Exception e) {e.printStackTrace();}}
}

5. 使用JAXB实现XML与Java对象之间的转换

JAXB通过注解和反射机制,实现了XML数据与Java对象之间的映射,简化了XML数据的解析和生成过程。

示例:使用JAXB将XML转换为Java对象
package cn.juwatech.xml;import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import java.io.File;@XmlRootElement(name = "book")
@XmlType(propOrder = {"title", "author", "year", "price"})
public class Book {private String title;private String author;private int year;private double price;@XmlElement(name = "title")public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}@XmlElement(name = "author")public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}@XmlElement(name = "year")public int getYear() {return year;}public void setYear(int year) {this.year = year;}@XmlElement(name = "price")public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public static void main(String[] args) {try {File xmlFile = new File("book.xml");JAXBContext context = JAXBContext.newInstance(Book.class);Unmarshaller unmarshaller = context.createUnmarshaller();Book book = (Book) unmarshaller.unmarshal(xmlFile);System.out.println("Book: " + book.getTitle());System.out.println("  Author: " + book.getAuthor());System.out.println("  Year: " + book.getYear());System.out.println("  Price: $" + book.getPrice());} catch (JAXBException e) {e.printStackTrace();}}
}

6. 总结

本文介绍了在Java中处理XML数据的几种常见方法:DOM、SAX和JAXB。每种方法都有其适用的场景和优缺点,具体选择取决于项目的需求和性能考虑。通过掌握这些技术,你可以更高效地处理和操作XML数据,从而实现Java应用程序中与外部系统的数据交换和集成。

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

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

相关文章

Elasticsearch:赋能数据搜索与分析的利器

Elasticsearch&#xff1a;赋能数据搜索与分析的利器 在大数据的时代背景下&#xff0c;如何高效地搜索、分析和利用数据成为了企业和开发者面临的重要问题。Elasticsearch&#xff0c;作为Elastic Stack的核心组件&#xff0c;以其分布式、高扩展性和实时的搜索与分析能力&am…

【CentOS7】Linux安装Docker教程(保姆篇)

文章目录 查看是否已安装卸载&#xff08;已安装过&#xff09;docker安装友情提示 更多相关内容可查看 注&#xff1a;本篇为Centos7安装Docker&#xff0c;若为其他系统请理性参考 查看是否已安装 如果已安装&#xff0c;请卸载重新安装 docker --version这里显示已安装 …

人机的三级抽象

数学的三级抽象包括第一级抽象是数表示万物、第二级抽象是字母表征数、第三级抽象是运算规则的抽象&#xff08;如群论&#xff09;&#xff0c;在人机交互中&#xff0c;类比于数学的三级抽象&#xff0c;可以理解为&#xff1a; 第一级抽象&#xff1a;用户界面和操作的抽象化…

力扣第210题“课程表 II”

在本篇文章中&#xff0c;我们将详细解读力扣第210题“课程表 II”。通过学习本篇文章&#xff0c;读者将掌握如何使用拓扑排序来解决这一问题&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释&#xff0c;以便于理解。 问题描述 力扣第210题“…

Linux 服务管理

服务(service)本质就是进程&#xff0c;但是是运行在后台的&#xff0c;通常都会监听某个端口&#xff0c;等待其它程序的请求&#xff0c;比如(mysqld , sshd防火墙等)&#xff0c;因此又称为守护进程。 比如通过xshell进行连接的时候&#xff0c;需要输入的端口号就是通过守护…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷8(容器云)

#需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包及镜像&#xff09;或有问题的&#xff0c;可私聊博主&#xff01;&#xff01;&#xff01; #需要资源&#xff08;软件包…

基于Java图书馆管理系统详细设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

iptables(4)规则匹配条件(源、目、协议、接口、端口)

简介 前面我们已经介绍了iptables的基本原理,表、链,数据包处理流程。如何查询各种表的信息。还有基本的增、删、改、保存的基础操作。 经过前文介绍,我们已经能够熟练的管理规则了,但是我们只使用过一种匹配条件,就是将”源地址”作为匹配条件。那么这篇文章中,我们就来…

[职场] 教师资格面试流程 #经验分享#其他

教师资格面试流程 教师资格证面试流程如下&#xff1a; ①候考。在考试当日&#xff0c;考生按照准考证上的时间进入候考室&#xff0c;进行抽签分组。 ②抽题。考生按照抽签顺序分组安排从面试题库系统试题组中任选其中一道试题&#xff0c;确认抽题后&#xff0c;计算机打印出…

爱心商城管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;企业管理&#xff0c;用户管理&#xff0c;论坛管理&#xff0c;商品管理&#xff0c;公告管理&#xff0c;用户捐赠 企业账户功能包括&#xff1a;系统首页&#xff0c;个人中心…

机器学习(二)

机器学习 3.分类算法3.1 sklearn转换器和估计器3.1.1 转换器3.1.2 估计器(在sklearn实现机器学习算法) 3.2 K-近邻算法3.2.1 什么是K-近邻算法3.2.2 K-近邻算法API3.2.3 案例&#xff1a;鸢尾花种类预测3.2.4 K-近邻总结 3.3 模型选择与调优3.3.1 交叉验证&#xff08;cross va…

LeetCode 70. 爬楼梯 使用c++解答

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2&#x…

【STM32+FPGA】先进算力+强安全+边缘AI,64位STM32MP2聚焦工业4.0应用

工业应用数字化和智能化程度&#xff0c;是衡量新质生产力的重要标准。STM32最新一代64位微处理器STM32MP2凭借先进算力、丰富接口和高安全性&#xff0c;为高性能和高度互联的工业4.0应用赋能。 STM32MP2四大关键特性&#xff0c;为工业4.0应用赋能 STM32MP2系列的第一颗产品S…

XTDrone-无人机与无人船协同初步-配置教程

说明&#xff1a;配置该教程时所使用的是Ubuntu20.04 1 海洋与无人船仿真环境搭建 cp -r ~/XTDrone/sitl_config/usv/* ~/catkin_ws/src/ cd catkin_ws catkin build # or catkin_make 说明&#xff1a;由于官方所编写的脚本时几年之前的&#xff0c;所以很多东西不符合现在…

【Rust日报】Dioxus 团队给Rust未来的期望

让你的第一个Rust严肃应用成功 corrode总结了一份用Rust实现工程的评估清单&#xff0c;为考虑采用Rust编程语言的企业提供了全面指南。以下是主要内容&#xff1a; 评估业务需求和适应性&#xff1a;确定Rust是否符合公司技术需求和长期目标。评估Rust的性能和安全特性在具体用…

Git的安装以及使用

一.简单介绍 1.1版本控制 版本控制是指对软件开发过程中各种程序代码,配置文件及说明文档等文件变更管理&#xff0c;是软件配置管理的核心思想之一。 版本控制最重要的内容是追踪文件的变更&#xff0c;它将什么时候&#xff0c;什么人更改了文件的什么内容等信息忠实的记录…

面向二级及二级以下医院的云HIS系统源码,涵盖患者、费用、医嘱、电子病历等核心业务功能。

云HIS系统源码&#xff0c;二级医院信息管理系统源码&#xff0c;电子病历系统 云HIS系统&#xff0c;采用云计算、互(物)联网、大数据、人工智能等现代信息技术&#xff0c;融合医保、医疗、医药全方位的管理和服务&#xff0c;为各类中小型医疗机构&#xff0c;包括二级及二…

B3996 [洛谷 202406GESP 模拟 三级] 小洛的数字游戏

题目描述 小洛有一个正整数 &#x1d45b;n&#xff0c;他会进行若干次下列操作&#xff1a; 取出正整数 &#x1d45b; 的末位&#xff0c;记作 &#x1d465;&#xff1b;将 &#x1d465;平方之后&#xff0c;保留个位&#xff0c;放于 &#x1d45b; 的首位之前&#xff…

打造智慧矿山:整体架构设计与实践探索

随着信息技术的不断发展&#xff0c;智慧矿山作为矿业领域的创新模式&#xff0c;正日益受到关注。在智慧矿山中&#xff0c;先进的传感器、大数据分析、人工智能等技术被广泛应用&#xff0c;以提高矿山生产效率、降低成本&#xff0c;并确保安全环保。本文将深入探讨智慧矿山…