最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA日常開(kāi)發(fā)中讀寫(xiě)XML的方法詳解

 更新時(shí)間:2024年12月24日 08:28:56   作者:xcLeigh  
這篇文章主要介紹了JAVA日常開(kāi)發(fā)中讀寫(xiě)XML的相關(guān)資料,詳細(xì)講解了在Java中如何使用DOM(文檔對(duì)象模型)和SAX(簡(jiǎn)單API?for?XML)兩種方式讀取XML文件,以及如何使用DOM和JAXB(Java?Architecture?for?XML?Binding)兩種方式寫(xiě)入XML文件,需要的朋友可以參考下

前言

在數(shù)字浪潮洶涌澎湃的時(shí)代,程序開(kāi)發(fā)宛如一座神秘而宏偉的魔法城堡,矗立在科技的浩瀚星空中。代碼的字符,似那閃爍的星辰,按照特定的軌跡與節(jié)奏,組合、交織、碰撞,即將開(kāi)啟一場(chǎng)奇妙且充滿(mǎn)無(wú)限可能的創(chuàng)造之旅。當(dāng)空白的文檔界面如同深邃的宇宙等待探索,程序員們則化身無(wú)畏的星辰開(kāi)拓者,指尖在鍵盤(pán)上輕舞,準(zhǔn)備用智慧與邏輯編織出足以改變世界運(yùn)行規(guī)則的程序畫(huà)卷,在 0 和 1 的二進(jìn)制世界里,鐫刻下屬于人類(lèi)創(chuàng)新與突破的不朽印記。

一、XML 簡(jiǎn)介

XML(eXtensible Markup Language)是一種可擴(kuò)展標(biāo)記語(yǔ)言,它被設(shè)計(jì)用來(lái)傳輸和存儲(chǔ)數(shù)據(jù)。XML 的結(jié)構(gòu)類(lèi)似于 HTML,都是由標(biāo)簽組成,但 XML 的標(biāo)簽是可以自定義的,這使得它具有很強(qiáng)的靈活性。

  • 例如,一個(gè)簡(jiǎn)單的 XML 文件可以用來(lái)存儲(chǔ)書(shū)籍信息:
<?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>

在這個(gè)例子中,<?xml version="1.0" encoding="UTF-8"?>是 XML 的聲明,它定義了 XML 的版本和編碼方式。是根元素,是子元素,并且元素有一個(gè)屬性category。

二、在 Java 中讀取 XML

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

DOM 方式會(huì)將整個(gè) XML 文檔加載到內(nèi)存中,形成一個(gè)樹(shù)形結(jié)構(gòu),然后可以通過(guò)遍歷這個(gè)樹(shù)形結(jié)構(gòu)來(lái)獲取 XML 中的數(shù)據(jù)。

首先,需要導(dǎo)入相關(guān)的 Java XML 庫(kù)。在 Java 中,主要是org.w3c.dom和javax.xml.parsers包。

  • 以下是一個(gè)簡(jiǎn)單的讀取 XML 文件并獲取其中書(shū)籍標(biāo)題的示例代碼:
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)建一個(gè)DocumentBuilderFactory對(duì)象,然后使用它創(chuàng)建一個(gè)DocumentBuilder。通過(guò)DocumentBuilder的parse方法將 XML 文件解析為一個(gè)Document對(duì)象。Document對(duì)象代表了整個(gè) XML 文檔的樹(shù)形結(jié)構(gòu)。通過(guò)getElementsByTagName方法可以獲取具有指定標(biāo)簽名的節(jié)點(diǎn)列表,然后遍歷這個(gè)列表來(lái)獲取每個(gè)元素中的

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

SAX 是一種基于事件驅(qū)動(dòng)的 XML 解析方式。它不會(huì)將整個(gè) XML 文檔加載到內(nèi)存中,而是在解析 XML 文檔的過(guò)程中,當(dāng)遇到特定的 XML 結(jié)構(gòu)(如開(kāi)始標(biāo)簽、結(jié)束標(biāo)簽、文本內(nèi)容等)時(shí),會(huì)觸發(fā)相應(yīng)的事件,通過(guò)定義事件處理器來(lái)處理這些事件,從而獲取 XML 中的數(shù)據(jù)。
要使用 SAX,需要實(shí)現(xiàn)org.xml.sax.ContentHandler接口來(lái)定義事件處理器。以下是一個(gè)簡(jiǎn)單的示例,用于統(tǒng)計(jì) XML 文件中書(shū)籍的數(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;
    }
}

在這個(gè)示例中,MyHandler類(lèi)繼承自DefaultHandler,并重寫(xiě)了startElement方法。當(dāng) SAX 解析器遇到開(kāi)始標(biāo)簽時(shí),會(huì)調(diào)用startElement方法。如果遇到標(biāo)簽,就會(huì)將bookCount加 1。最后,通過(guò)getBookCount方法獲取書(shū)籍的數(shù)量。

三、在 Java 中寫(xiě)入 XML

3.1 使用 DOM 方式寫(xiě)入 XML

  • 以下是一個(gè)簡(jiǎn)單的示例,用于創(chuàng)建一個(gè)新的 XML 文件并寫(xiě)入書(shū)籍信息:
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();
        }
    }
}

首先,通過(guò)DocumentBuilder創(chuàng)建一個(gè)新的Document對(duì)象。然后,使用createElement方法創(chuàng)建 XML 元素,并使用appendChild方法將元素添加到文檔樹(shù)中。設(shè)置好元素的文本內(nèi)容后,通過(guò)Transformer將Document對(duì)象轉(zhuǎn)換為 XML 文件并保存到磁盤(pán)上。
使用 JAXB(Java Architecture for XML Binding)方式寫(xiě)入 XML
JAXB 提供了一種將 Java 對(duì)象與 XML 數(shù)據(jù)進(jìn)行相互轉(zhuǎn)換的機(jī)制。首先需要定義 Java 類(lèi)來(lái)對(duì)應(yīng) XML 的結(jié)構(gòu)。

  • 假設(shè)我們有一個(gè)Book類(lèi)和一個(gè)Bookstore類(lèi)來(lái)對(duì)應(yīng)上面的 XML 結(jié)構(gòu):
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;

    // 構(gòu)造函數(shù)、getter和setter方法省略
}

class Bookstore {
    private List<Book> books = new ArrayList<>();

    public void addBook(Book book) {
        books.add(book);
    }

    // 其他方法省略
}
  • 以下是使用 JAXB 將Bookstore對(duì)象轉(zhuǎn)換為 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();
        }
    }
}

在這個(gè)示例中,首先創(chuàng)建了Bookstore和Book對(duì)象,并設(shè)置了相關(guān)屬性。然后通過(guò)JAXBContext和Marshaller將Bookstore對(duì)象轉(zhuǎn)換為 XML 格式并保存到文件中。setProperty方法用于設(shè)置輸出格式為格式化后的 XML。

總結(jié)

到此這篇關(guān)于JAVA日常開(kāi)發(fā)中讀寫(xiě)XML的文章就介紹到這了,更多相關(guān)JAVA讀寫(xiě)XML詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis-Plus中SimpleQuery查詢(xún)實(shí)現(xiàn)

    MyBatis-Plus中SimpleQuery查詢(xún)實(shí)現(xiàn)

    本文主要介紹了MyBatis-Plus中SimpleQuery查詢(xún)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java fastjson2 解析JSON用法詳解

    Java fastjson2 解析JSON用法詳解

    Fastjson2是Fastjson的升級(jí)版,提供了更好的性能和擴(kuò)展性,它支持多種方式解析JSON數(shù)據(jù),包括將JSON字符串轉(zhuǎn)換為Java對(duì)象、嵌套的JSON對(duì)象和數(shù)組,以及轉(zhuǎn)換成Map或List,本文介紹Java fastjson2 解析JSON用法,感興趣的朋友一起看看吧
    2025-02-02
  • 詳解Java的Hibernate框架中的緩存與二級(jí)緩存

    詳解Java的Hibernate框架中的緩存與二級(jí)緩存

    這篇文章主要介紹了Java的Hibernate框架中的緩存與二級(jí)緩存,Hibernate是Java的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • 避免Java中的內(nèi)存泄漏的三種方法

    避免Java中的內(nèi)存泄漏的三種方法

    在Java開(kāi)發(fā)中,內(nèi)存泄漏(Memory Leak)是一個(gè)常見(jiàn)但令人頭疼的問(wèn)題,本文將深入探討什么是內(nèi)存泄漏、常見(jiàn)的泄漏原因、如何識(shí)別和避免內(nèi)存泄漏,以及通過(guò)代碼示例展示如何優(yōu)化Java程序以減少內(nèi)存泄漏的發(fā)生,需要的朋友可以參考下
    2024-07-07
  • java 整型數(shù)與Integer的緩存深入理解

    java 整型數(shù)與Integer的緩存深入理解

    這篇文章主要介紹了java 整型數(shù)與Integer的緩存深入理解的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • eclipse的git插件安裝、配置與使用詳解

    eclipse的git插件安裝、配置與使用詳解

    這篇文章主要介紹了eclipse的git插件安裝、配置與使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Spring計(jì)時(shí)器StopWatch使用示例

    Spring計(jì)時(shí)器StopWatch使用示例

    這篇文章主要介紹了Spring計(jì)時(shí)器StopWatch使用示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Java集成和使用dl4j實(shí)現(xiàn)通過(guò)掃描圖片識(shí)別快遞單信息

    Java集成和使用dl4j實(shí)現(xiàn)通過(guò)掃描圖片識(shí)別快遞單信息

    這篇文章主要為大家詳細(xì)介紹了Java如何使用DL4J搭建一個(gè)簡(jiǎn)單的圖像識(shí)別模型,并將其集成到Spring?Boot后端中從而實(shí)現(xiàn)通過(guò)掃描圖片識(shí)別快遞單信息,需要的可以參考下
    2024-12-12
  • Dubbo Consumer引用服務(wù)示例代碼詳解

    Dubbo Consumer引用服務(wù)示例代碼詳解

    dubbo中引用遠(yuǎn)程服務(wù)有兩種方式:服務(wù)直連(不經(jīng)過(guò)注冊(cè)中心)、基于注冊(cè)中心引用服務(wù),在實(shí)際線(xiàn)上環(huán)境中我們基本上使用的都是基于注冊(cè)中心引用服務(wù)的方式,下面我們就圍繞該方式講解分析
    2023-03-03
  • 利用Java對(duì)PDF文件進(jìn)行電子簽章的實(shí)戰(zhàn)過(guò)程

    利用Java對(duì)PDF文件進(jìn)行電子簽章的實(shí)戰(zhàn)過(guò)程

    隨著電子賬單、回單、通知、合同的流行,電子文檔的可信度變得非常重要,為防止非法篡改,確保文檔的權(quán)威性,我們可以對(duì)PDF進(jìn)行電子簽章,這篇文章主要給大家介紹了關(guān)于如何利用Java對(duì)PDF文件進(jìn)行電子簽章的相關(guān)資料,需要的朋友可以參考下
    2021-07-07

最新評(píng)論

澜沧| 甘谷县| 徐汇区| 宜宾市| 达孜县| 简阳市| 龙井市| 微山县| 新和县| 兴山县| 屯昌县| 根河市| 阜阳市| 聊城市| 新竹县| 沁水县| 无锡市| 郸城县| 尼勒克县| 旺苍县| 中卫市| 怀远县| 浮梁县| 岳池县| 凤山县| 岗巴县| 霸州市| 会昌县| 梅河口市| 岚皋县| 双江| 黑河市| 江山市| 泰州市| 万荣县| 永吉县| 辉南县| 通道| 侯马市| 浦北县| 嘉黎县|