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(防止抄袭,原文地址不可删除)