String與XML互轉(zhuǎn)以及從XML取節(jié)點(diǎn)值并修改的方法
讀取xml文件生成Document對(duì)象
Document轉(zhuǎn)換成String類型串
String串轉(zhuǎn)成xml
已知xml節(jié)點(diǎn)取節(jié)點(diǎn)值
已知xml節(jié)點(diǎn)修改節(jié)點(diǎn)值
一個(gè)xml文件:
<?xml version="1.0" encoding="UTF-8"?> <transaction> <body> <request> <tranTyp>批量業(yè)務(wù)現(xiàn)存</tranTyp> <acctNm>0085213560</acctNm> <acctNo>6225885517843413</acctNo> <avlBal>201958.65</avlBal> <acctTyp>0</acctTyp> <tranTime>20170801101030</tranTime> <currencyTyp>CNY</currencyTyp> <tranDesc></tranDesc> <bal>201958.65</bal> <tranAmt>100000.00</tranAmt> </request> </body> <header> <msg> <sndTm>101019</sndTm> <msgCd>WCS0000200</msgCd> <seqNb>632376531000009</seqNb> <sndMbrCd>5200</sndMbrCd> <rcvMbrCd>0000</rcvMbrCd> <sndDt>20170821</sndDt> <sndAppCd>CBS</sndAppCd> <rcvAppCd>WCS</rcvAppCd> <callTyp>SYN</callTyp> </msg> <ver>1.0</ver> <pnt> <sndTm>101216</sndTm> <sndMbrCd>0000</sndMbrCd> <rcvMbrCd>0000</rcvMbrCd> <sndDt>20170809</sndDt> <sndAppCd>ESB</sndAppCd> <rcvAppCd>WCS</rcvAppCd> </pnt> </header> </transaction>
java實(shí)現(xiàn)實(shí)例:
package com.adtec.mq.client; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.InputStream; 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 javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.Node; public class Test { /** * * @param document * Document對(duì)象(讀xml生成的) * @return String字符串 * @throws Throwable */ public String xmlToString(Document document) throws Throwable { TransformerFactory ft = TransformerFactory.newInstance(); Transformer ff = ft.newTransformer(); ff.setOutputProperty("encoding", "GB2312"); ByteArrayOutputStream bos = new ByteArrayOutputStream(); ff.transform(new DOMSource(document), new StreamResult(bos)); return bos.toString(); } /** * * @param xml形狀的str串 * @return Document 對(duì)象 */ public Document StringTOXml(String str) { StringBuilder sXML = new StringBuilder(); sXML.append(str); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Document doc = null; try { InputStream is = new ByteArrayInputStream(sXML.toString().getBytes("utf-8")); doc = dbf.newDocumentBuilder().parse(is); is.close(); } catch (Exception e) { e.printStackTrace(); } return doc; } /** * * @param document * @return 某個(gè)節(jié)點(diǎn)的值 前提是需要知道xml格式,知道需要取的節(jié)點(diǎn)相對(duì)根節(jié)點(diǎn)所在位置 */ public String getNodeValue(Document document, String nodePaht) { XPathFactory xpfactory = XPathFactory.newInstance(); XPath path = xpfactory.newXPath(); String servInitrBrch = ""; try { servInitrBrch = path.evaluate(nodePaht, document); } catch (XPathExpressionException e) { e.printStackTrace(); } return servInitrBrch; } /** * * @param document * @param nodePath * 需要修改的節(jié)點(diǎn)相對(duì)根節(jié)點(diǎn)所在位置 * @param vodeValue * 替換的值 */ public void setNodeValue(Document document, String nodePath, String vodeValue) { XPathFactory xpfactory = XPathFactory.newInstance(); XPath path = xpfactory.newXPath(); Node node = null; ; try { node = (Node) path.evaluate(nodePath, document, XPathConstants.NODE); } catch (XPathExpressionException e) { e.printStackTrace(); } node.setTextContent(vodeValue); } public static void main(String[] args) throws Throwable { // 讀取xml文件,生成document對(duì)象 DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); // 文件的位置在工作空間的根目錄(位置隨意,只要寫對(duì)就ok) Document document = builder.parse(new File("a.xml")); Test t = new Test(); // XML————》String String str = t.xmlToString(document); System.out.println("str:" + str); // String ————》XML Document doc = t.StringTOXml(str); String nodePath = "/transaction/header/msg/sndMbrCd"; // getNodeValue String nodeValue = t.getNodeValue(doc, nodePath); System.out.println("修改前nodeValue:" + nodeValue); // setNodeValue t.setNodeValue(doc, nodePath, nodeValue + "hello"); System.out.println("修改后nodeValue:" + t.getNodeValue(doc, nodePath)); } }
測(cè)試結(jié)果:
str:<?xml version="1.0" encoding="UTF-8" standalone="no"?><transaction> <body> <request> <tranTyp>批量業(yè)務(wù)現(xiàn)存</tranTyp> <acctNm>0085213560</acctNm> <acctNo>6225885517843413</acctNo> <avlBal>201958.65</avlBal> <acctTyp>0</acctTyp> <tranTime>20170801101030</tranTime> <currencyTyp>CNY</currencyTyp> <tranDesc/> <bal>201958.65</bal> <tranAmt>100000.00</tranAmt> </request> </body> <header> <msg> <sndTm>101019</sndTm> <msgCd>WCS0000200</msgCd> <seqNb>632376531000009</seqNb> <sndMbrCd>5200</sndMbrCd> <rcvMbrCd>0000</rcvMbrCd> <sndDt>20170821</sndDt> <sndAppCd>CBS</sndAppCd> <rcvAppCd>WCS</rcvAppCd> <callTyp>SYN</callTyp> </msg> <ver>1.0</ver> <pnt> <sndTm>101216</sndTm> <sndMbrCd>0000</sndMbrCd> <rcvMbrCd>0000</rcvMbrCd> <sndDt>20170809</sndDt> <sndAppCd>ESB</sndAppCd> <rcvAppCd>WCS</rcvAppCd> </pnt> </header> </transaction> 修改前nodeValue:5200 修改后nodeValue:5200hello
以上這篇String與XML互轉(zhuǎn)以及從XML取節(jié)點(diǎn)值并修改的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java數(shù)據(jù)結(jié)構(gòu)之順序表和鏈表精解
我在學(xué)習(xí)完順序表后一直對(duì)順序表和鏈表的概念存在一些疑問,這里給出一些分析和看法,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下2021-09-09idea創(chuàng)建maven父子工程導(dǎo)致子工程無法導(dǎo)入父工程依賴
創(chuàng)建maven父子工程時(shí)遇到一個(gè)問題,本文主要介紹了idea創(chuàng)建maven父子工程導(dǎo)致子工程無法導(dǎo)入父工程依賴,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04SpringBoot?基于?MongoTemplate?的工具類過程詳解
MongoDB是一個(gè)高性能,開源,無模式的文檔型數(shù)據(jù)庫,是當(dāng)前NoSql數(shù)據(jù)庫中比較熱門的一種,這篇文章主要介紹了SpringBoot基于MongoTemplate的工具類,需要的朋友可以參考下2023-09-09如何在SpringBoot項(xiàng)目中使用Oracle11g數(shù)據(jù)庫
這篇文章主要介紹了在SpringBoot項(xiàng)目中使用Oracle11g數(shù)據(jù)庫的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06使用JavaConfig代替xml實(shí)現(xiàn)Spring配置操作
這篇文章主要介紹了使用JavaConfig代替xml實(shí)現(xiàn)Spring配置操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09SpringCloud大文件分片斷點(diǎn)上傳實(shí)現(xiàn)原理
這篇文章主要介紹了SpringCloud大文件分片斷點(diǎn)上傳實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05Java String index out of range:100錯(cuò)誤解決方案詳解
這篇文章主要介紹了Java String index out of range:100錯(cuò)誤解決方案詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08