JAVA日常開發(fā)中讀寫XML的方法詳解
前言
在數(shù)字浪潮洶涌澎湃的時代,程序開發(fā)宛如一座神秘而宏偉的魔法城堡,矗立在科技的浩瀚星空中。代碼的字符,似那閃爍的星辰,按照特定的軌跡與節(jié)奏,組合、交織、碰撞,即將開啟一場奇妙且充滿無限可能的創(chuàng)造之旅。當空白的文檔界面如同深邃的宇宙等待探索,程序員們則化身無畏的星辰開拓者,指尖在鍵盤上輕舞,準備用智慧與邏輯編織出足以改變世界運行規(guī)則的程序畫卷,在 0 和 1 的二進制世界里,鐫刻下屬于人類創(chuàng)新與突破的不朽印記。
一、XML 簡介
XML(eXtensible Markup Language)是一種可擴展標記語言,它被設計用來傳輸和存儲數(shù)據(jù)。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 中的數(shù)據(jù)。
首先,需要導入相關的 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(); } } }
上述代碼首先創(chuàng)建一個DocumentBuilderFactory對象,然后使用它創(chuàng)建一個DocumentBuilder。通過DocumentBuilder的parse方法將 XML 文件解析為一個Document對象。Document對象代表了整個 XML 文檔的樹形結構。通過getElementsByTagName方法可以獲取具有指定標簽名的節(jié)點列表,然后遍歷這個列表來獲取每個元素中的
2.2 使用 SAX(Simple API for XML)方式讀取 XML
SAX 是一種基于事件驅動的 XML 解析方式。它不會將整個 XML 文檔加載到內存中,而是在解析 XML 文檔的過程中,當遇到特定的 XML 結構(如開始標簽、結束標簽、文本內容等)時,會觸發(fā)相應的事件,通過定義事件處理器來處理這些事件,從而獲取 XML 中的數(shù)據(jù)。
要使用 SAX,需要實現(xiàn)org.xml.sax.ContentHandler接口來定義事件處理器。以下是一個簡單的示例,用于統(tǒng)計 XML 文件中書籍的數(shù)量:
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; @Override public 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方法獲取書籍的數(shù)量。
三、在 Java 中寫入 XML
3.1 使用 DOM 方式寫入 XML
- 以下是一個簡單的示例,用于創(chuàng)建一個新的 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創(chuàng)建一個新的Document對象。然后,使用createElement方法創(chuàng)建 XML 元素,并使用appendChild方法將元素添加到文檔樹中。設置好元素的文本內容后,通過Transformer將Document對象轉換為 XML 文件并保存到磁盤上。
使用 JAXB(Java Architecture for XML Binding)方式寫入 XML
JAXB 提供了一種將 Java 對象與 XML 數(shù)據(jù)進行相互轉換的機制。首先需要定義 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; // 構造函數(shù)、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(); } } }
在這個示例中,首先創(chuàng)建了Bookstore和Book對象,并設置了相關屬性。然后通過JAXBContext和Marshaller將Bookstore對象轉換為 XML 格式并保存到文件中。setProperty方法用于設置輸出格式為格式化后的 XML。
總結
到此這篇關于JAVA日常開發(fā)中讀寫XML的文章就介紹到這了,更多相關JAVA讀寫XML詳解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
idea打開項目后無法顯示目錄結構,只能顯示.iml文件問題
這篇文章主要介紹了idea打開項目后無法顯示目錄結構,只能顯示.iml文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08javaweb中mysql數(shù)據(jù)庫連接步驟方法及其實例
這篇文章主要介紹了使用java web 連接MySQL數(shù)據(jù)庫的驅動方法的相關知識,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下2017-04-04如何在Spring中使用編碼方式動態(tài)配置Bean詳解
這篇文章主要給大家介紹了關于如何在Spring中使用編碼方式動態(tài)配置Bean的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-05-05SpringCloud gateway+zookeeper實現(xiàn)網(wǎng)關路由的詳細搭建
這篇文章主要介紹了SpringCloud gateway+zookeeper實現(xiàn)網(wǎng)關路由,本文通過圖文實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08Java數(shù)據(jù)結構之ArrayList從順序表到實現(xiàn)
Java中的ArrayList是一種基于數(shù)組實現(xiàn)的數(shù)據(jù)結構,支持動態(tài)擴容和隨機訪問元素,可用于實現(xiàn)順序表等數(shù)據(jù)結構。ArrayList在內存中連續(xù)存儲元素,支持快速的隨機訪問和遍歷。通過學習ArrayList的實現(xiàn)原理和使用方法,可以更好地掌握Java中的數(shù)據(jù)結構和算法2023-04-04Springboot?通過FastJson實現(xiàn)bean對象和Json字符串互轉問題
這篇文章主要介紹了Springboot?通過FastJson實現(xiàn)bean對象和Json字符串互轉,本文嘗試驗證兩種場景給大家詳細介紹,對Springboot?FastJson實現(xiàn)bean和Json互轉問題,感興趣的朋友一起看看吧2022-08-08