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

java解析xml文本的示例方法

 更新時(shí)間:2024年12月25日 09:36:10   作者:程序員老王wd  
這篇文章主要為大家詳細(xì)介紹了java解析xml文本的相關(guān)方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

示例文本

<Message>
    <MessageName>time_request</MessageName>
    <Timestamp>20220217165432906359</Timestamp>
    <Body>
        <EQPID>CMMAB01-DTP01</EQPID>
    </Body>
</Message>

示例代碼

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.ByteArrayInputStream;
String textContent = null;

    try {
        // 創(chuàng)建文檔構(gòu)建器并解析 XML 字符串
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(new ByteArrayInputStream(object.getBytes("UTF-8")));
        doc.getDocumentElement().normalize();

        // 獲取 MessageName 元素
        NodeList messageNameList = doc.getElementsByTagName("MessageName");
        if (messageNameList.getLength() > 0) {
            textContent = messageNameList.item(0).getTextContent();
        } else {
            throw new ApiException(ApiException.showStr("Missing MessageName element."));
        }

        // 獲取 Body 元素
        NodeList bodyList = doc.getElementsByTagName("Body");

        // 根據(jù) MessageName 處理請(qǐng)求
        return equSMTService.saveICT(textContent, bodyList);

    } catch (Exception e) {
        // 記錄異常并拋出 ApiException
        throw new ApiException(ApiException.showStr("Error processing the request: " + e.getMessage()));
    }
        String eqpId = body.getElementsByTagName("EQPID").item(0).getTextContent();
        String machineId = body.getElementsByTagName("MACHINEID").item(0).getTextContent();
        String panelid = body.getElementsByTagName("PANELID").item(0).getTextContent();
        NodeList recipeid = body.getElementsByTagName("ITEM");
        for (int i = 0; i < recipeid.getLength(); i++) {
            Node badeNode = recipeid.item(i);
            if (badeNode.getNodeType() == Node.ELEMENT_NODE) {
                Element badeElement = (Element) badeNode;
                String itemid = badeElement.getElementsByTagName("ITEMID").item(0).getTextContent();
                String itemvalue  =badeElement.getElementsByTagName("ITEMVALUE").item(0).getTextContent();
            }
        }

XML 解析流程概述 在這段代碼中,主要實(shí)現(xiàn)了從一個(gè) XML 格式的對(duì)象(假設(shè)object存儲(chǔ)了 XML 數(shù)據(jù))中解析出特定元素的值,并根據(jù)解析結(jié)果進(jìn)行后續(xù)處理的功能。整體流程包括以下幾個(gè)關(guān)鍵步驟:

1.準(zhǔn)備解析環(huán)境

首先,創(chuàng)建DocumentBuilderFactory實(shí)例,通過(guò)調(diào)用DocumentBuilderFactory.newInstance()方法來(lái)獲取一個(gè)工廠對(duì)象,用于創(chuàng)建DocumentBuilder實(shí)例。

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

2.創(chuàng)建 DocumentBuilder 使用前面獲取的工廠對(duì)象創(chuàng)建DocumentBuilder實(shí)例,這是實(shí)際用于解析 XML 的構(gòu)建器。

DocumentBuilder builder = factory.newDocumentBuilder();

3.解析 XML 數(shù)據(jù) 將存儲(chǔ) XML 數(shù)據(jù)的object轉(zhuǎn)換為字節(jié)流,并使用創(chuàng)建好的DocumentBuilder進(jìn)行解析,得到代表整個(gè)XML 文檔結(jié)構(gòu)的Document對(duì)象。同時(shí),對(duì)文檔元素進(jìn)行規(guī)范化處理(例如處理文本節(jié)點(diǎn)的空白等)。

Document doc = builder.parse(new ByteArrayInputStream(object.getBytes("UTF-8")));
doc.getDocumentElement().normalize();

4.提取特定元素的值

提取 MessageName 元素的值:

通過(guò)getElementsByTagName方法在解析后的Document對(duì)象中查找所有名為MessageName的元素,返回一個(gè)NodeList集合。

然后判斷該集合的長(zhǎng)度,如果大于 0,則獲取第一個(gè)MessageName元素的文本內(nèi)容,并存儲(chǔ)到textContent變量中;否則,拋出一個(gè)自定義的ApiException異常,表示缺少M(fèi)essageName元素。

NodeList messageNameList = doc.getElementsByTagName("MessageName");
if (messageNameList.getLength() > 0) {
    textContent = messageNameList.item(0).getTextContent();
} else {
    throw new ApiException(ApiException.showStr("Missing MessageName element."));
}

5.提取 Body 元素的值(雖然代碼中未完整展示對(duì) Body 元素內(nèi)容的詳細(xì)處理,但獲取了該元素的節(jié)點(diǎn)列表):

同樣使用getElementsByTagName方法獲取所有名為Body的元素,得到一個(gè)NodeList。

NodeList bodyList = doc.getElementsByTagName("Body");

6.提取 Body 元素下特定子元素的值(以示例中的循環(huán)處理為例):

先通過(guò)body.getElementsByTagName(“EQPID”)等類似方式獲取特定子元素(如EQPID、MACHINEID、PANELID等)的第一個(gè)節(jié)點(diǎn),并獲取其文本內(nèi)容,分別存儲(chǔ)到對(duì)應(yīng)的變量(eqpId、machineId、panelid等)中。

對(duì)于ITEM元素下的子元素ITEMID和ITEMVALUE,通過(guò)循環(huán)遍歷body.getElementsByTagName(“ITEM”)得到的NodeList,判斷節(jié)點(diǎn)類型為元素節(jié)點(diǎn)后,進(jìn)行強(qiáng)制類型轉(zhuǎn)換,再分別獲取其文本內(nèi)容存儲(chǔ)到相應(yīng)變量(itemid和itemvalue)中。

String eqpId = body.getElementsByTagName("EQPID").item(0).getTextContent();
String machineId = body.getElementsByTagName("MACHINEID").item(0).getTextContent();
String panelid = body.getElementsByTagName("PANELID").item(0).getTextContent();
NodeList recipeid = body.getElementsByTagName("ITEM");
for (int i = 0; i < recipeid.getLength(); i++) {
    Node badeNode = recipeid.item(i);
    if (badeNode.getNodeType() == Node.ELEMENT_NODE) {
        Element badeElement = (Element) badeNode;
        String itemid = badeElement.getElementsByTagName("ITEMID").item(0).getTextContent();
        String itemvalue = badeElement.getElementsByTagName("ITEMVALUE").item(0).getTextContent();
    }
}

通過(guò)以上步驟,實(shí)現(xiàn)了對(duì)給定 XML 數(shù)據(jù)的解析、特定元素值的提取以及基于解析結(jié)果的后續(xù)業(yè)務(wù)處理,并對(duì)可能出現(xiàn)的異常進(jìn)行了相應(yī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 XmlMessageCreator {

    public static String createXmlMessage() {
        try {
            // 創(chuàng)建DocumentBuilderFactory實(shí)例
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            // 創(chuàng)建DocumentBuilder
            DocumentBuilder builder = factory.newDocumentBuilder();

            // 創(chuàng)建一個(gè)空的Document對(duì)象
            Document doc = builder.newDocument();

            // 創(chuàng)建根元素<Message>
            Element messageElement = doc.createElement("Message");
            doc.appendChild(messageElement);

            // 創(chuàng)建<MessageName>元素并設(shè)置文本內(nèi)容
            Element messageNameElement = doc.createElement("MessageName");
            messageNameElement.setTextContent("time_request");
            messageElement.appendChild(messageNameElement);

            // 創(chuàng)建<Timestamp>元素并設(shè)置文本內(nèi)容
            Element timestampElement = doc.createElement("Timestamp");
            timestampElement.setTextContent("20220217165432906359");
            messageElement.appendChild(timestampElement);

            // 創(chuàng)建<Body>元素
            Element bodyElement = doc.createElement("Body");
            messageElement.appendChild(bodyElement);

            // 創(chuàng)建<EQPID>元素并設(shè)置文本內(nèi)容
            Element eqpidElement = doc.createElement("EQPID");
            eqpidElement.setTextContent("CMMAB01-DTP01");
            bodyElement.appendChild(eqpidElement);

            // 將Document對(duì)象轉(zhuǎn)換為XML字符串
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new java.io.StringWriter());
            transformer.transform(source, result);

            return result.getWriter().toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static void main(String[] args) {
        String xmlMessage = createXmlMessage();
        if (xmlMessage!= null) {
            System.out.println(xmlMessage);
        }
    }
}

到此這篇關(guān)于java解析xml文本的示例方法的文章就介紹到這了,更多相關(guān)java解析xml內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 通過(guò)實(shí)例解析java8中的parallelStream

    通過(guò)實(shí)例解析java8中的parallelStream

    這篇文章主要介紹了通過(guò)實(shí)例解析java8中的parallelStream,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • List集合多線程并發(fā)條件下不安全如何解決

    List集合多線程并發(fā)條件下不安全如何解決

    List是我們常用的集合,但是在多線程并發(fā)的條件下,會(huì)出現(xiàn)安全問(wèn)題嗎?下面我們就來(lái)測(cè)試一下,如果出現(xiàn)安全問(wèn)題,該如何解決,感興趣的可以了解一下
    2021-12-12
  • MyBatis-Plus實(shí)用篇超完整教程

    MyBatis-Plus實(shí)用篇超完整教程

    MyBatis-Plus是一個(gè)MyBatis的增強(qiáng)工具,提供了許多便捷的功能,簡(jiǎn)化了開(kāi)發(fā)流程,同時(shí),MyBatis-Plus提供了鏈?zhǔn)讲樵兣c修改、靜態(tài)工具類、自定義SQL、IPage的泛型轉(zhuǎn)換、ActiveRecord等擴(kuò)展功能,以及分頁(yè)插件和MyBatisX插件等插件,進(jìn)一步提高了開(kāi)發(fā)效率,感興趣的朋友一起看看吧
    2025-02-02
  • Spring基于注解讀取外部配置文件

    Spring基于注解讀取外部配置文件

    這篇文章主要介紹了Spring基于注解讀取外部配置文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 一文徹底掌握J(rèn)ava中的Lambda表達(dá)式

    一文徹底掌握J(rèn)ava中的Lambda表達(dá)式

    Lambda表達(dá)式是Java 8引入的一項(xiàng)重要功能,它允許我們以更簡(jiǎn)潔和靈活的方式編寫(xiě)代碼,這篇文章主要介紹了Java中Lambda表達(dá)式的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-01-01
  • SpringBoot ResponseBody返回值處理的實(shí)現(xiàn)

    SpringBoot ResponseBody返回值處理的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot ResponseBody返回值處理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • SpringMVC用XML方式實(shí)現(xiàn)AOP的方法示例

    SpringMVC用XML方式實(shí)現(xiàn)AOP的方法示例

    這篇文章主要介紹了SpringMVC用XML方式實(shí)現(xiàn)AOP的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • SpringBoot實(shí)現(xiàn)整合多數(shù)據(jù)源的全攻略

    SpringBoot實(shí)現(xiàn)整合多數(shù)據(jù)源的全攻略

    在實(shí)際開(kāi)發(fā)中,單數(shù)據(jù)源往往無(wú)法滿足復(fù)雜的業(yè)務(wù)場(chǎng)景,本文將從實(shí)際業(yè)務(wù)需求出發(fā),拆解?SpringBoot?中多數(shù)據(jù)源的核心實(shí)現(xiàn)方式,并附上可直接運(yùn)行的代碼示例,需要的可以了解下
    2026-03-03
  • SpringBoot如何升級(jí)到3.0

    SpringBoot如何升級(jí)到3.0

    這篇文章主要介紹了SpringBoot如何升級(jí)到3.0問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • spring boot接收請(qǐng)求常用注解示例詳解

    spring boot接收請(qǐng)求常用注解示例詳解

    這篇文章介紹了Spring Boot中常用的接收請(qǐng)求的注解,包括`@RequestBody`、`@PathVariable`、`@RequestParam`和`@DateTimeFormat`,并提供了每個(gè)注解的示例,感興趣的朋友跟隨小編一起看看吧
    2025-02-02

最新評(píng)論

扎兰屯市| 沙洋县| 温宿县| 鲁甸县| 四会市| 大冶市| 上栗县| 安吉县| 巴里| 洪江市| 福鼎市| 肥东县| 友谊县| 滦南县| 博白县| 宁国市| 黔东| 腾冲县| 仙游县| 托里县| 老河口市| 敖汉旗| 南宫市| 龙山县| 青冈县| 澄城县| 分宜县| 南郑县| 亳州市| 汶川县| 东宁县| 水城县| 平定县| 奎屯市| 浙江省| 龙门县| 隆德县| 新邵县| 定结县| 海淀区| 双峰县|