Java?根據(jù)XPATH批量替換XML節(jié)點中的值
測試環(huán)境:
JDK 1.8.0_25
代碼實操:
message.xml文件
<Request service="SALE_ORDER_SERVICE" lang="zh-CN">
<Head>
<AccessCode>xxxxxxxxxx12Ur8v6qkYAaOf</AccessCode>
<Checkword>xxxxxxxxxxkmPif7Z35UEJjrR</Checkword>
</Head>
<Body>
<SaleOrderRequest>
<CompanyCode>Wxxxxxxxxxx</CompanyCode>
<SaleOrders>
<SaleOrder>
<WarehouseCode>xxxxxxx</WarehouseCode>
<ErpOrder>SO20220519xxxx13190</ErpOrder>
<ErpOrderType>3</ErpOrderType>
<orderType>10</orderType>
<receiverAddress>未知地址</receiverAddress>
<OrderReceiverInfo>
<ReceiverCompany>個人</ReceiverCompany>
<ReceiverName>凱琳</ReceiverName>
<ReceiverCountry>中國</ReceiverCountry>
<ReceiverProvince>廣東省</ReceiverProvince>
<ReceiverCity>江門市</ReceiverCity>
<ReceiverArea>蓬江區(qū)</ReceiverArea>
<ReceiverAddress>詳細(xì)地址</ReceiverAddress>
</OrderReceiverInfo>
<OrderItems>
<OrderItem>
<SkuNo>1001178</SkuNo>
<ItemName>保婦康栓1.74g*14粒/盒</ItemName>
<ItemQuantity>1</ItemQuantity>
</OrderItem>
<OrderItem>
<SkuNo>1008766</SkuNo>
<ItemName>美團(tuán)小藥箱</ItemName>
<ItemQuantity>1</ItemQuantity>
</OrderItem>
</OrderItems>
</SaleOrder>
</SaleOrders>
</SaleOrderRequest>
</Body>
</Request>XMLHelper.java
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
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 java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
public class XMLHelper {
// XML文件轉(zhuǎn)XML文檔對象
public static Document xmlFileToDocument(String filePath) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream(new File(filePath)));
return doc;
}
// XML文檔轉(zhuǎn)XML字符串
public static String docToString(Document doc) throws TransformerException {
TransformerFactory ft = TransformerFactory.newInstance();
Transformer ff = ft.newTransformer();
ff.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
ff.setOutputProperty("encoding", "gbk");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ff.transform(new DOMSource(doc), new StreamResult(bos));
return bos.toString();
}
// XML字符串轉(zhuǎn)XML文檔對象
public static Document stringToDocument(String xmlData) throws Exception {
StringReader sr = new StringReader(xmlData);
InputSource is = new InputSource(sr);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(is);
return doc;
}
// 替換單個XPATH指定的XML節(jié)點值
public static void replaceXmlNodeValue(Document doc, String nodePath, String value) throws XPathExpressionException {
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
// 匹配需替換的節(jié)點
NodeList nodeList = (NodeList) xpath.evaluate(nodePath, doc, XPathConstants.NODESET);
// 單個XPATH可能匹配多個XML節(jié)點,所以需要遍歷替換
for (int i = 0; i < nodeList.getLength(); i++) {
nodeList.item(i).setTextContent(value);
}
}
// 批量多個XPATH指定的XML節(jié)點值
public static void replaceXmlNodesValue(Document doc, List<String> nodesPath, String value) throws XPathExpressionException {
for (String nodePath : nodesPath) {
XMLHelper.replaceXmlNodeValue(doc, nodePath, value);
}
}
public static void replaceReceiverAddress(Document doc, String value) throws Exception{
List nodesPath= new ArrayList();
nodesPath.add(".//OrderReceiverInfo/ReceiverAddress");
nodesPath.add(".//receiverAddress");
XMLHelper.replaceXmlNodesValue(doc, nodesPath, value);
}
public static void main(String []args) {
try {
Document doc = XMLHelper.xmlFileToDocument("message.xml");
// 替換地址
XMLHelper.replaceReceiverAddress(doc, "吉祥街道幸福社區(qū)1號大樓23號");
String newXml = XMLHelper.docToString(doc);
System.out.println(newXml);
} catch (Exception e) {
e.printStackTrace();
}
}
}到此這篇關(guān)于Java 根據(jù)XPATH批量替換XML節(jié)點中的值的文章就介紹到這了,更多相關(guān)Java替換XML節(jié)點值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用maven實現(xiàn)redis與idea的連接問題
這篇文章主要介紹了使用maven實現(xiàn)redis與idea的連接問題,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-07-07
在Java8與Java7中HashMap源碼實現(xiàn)的對比
這篇文章主要介紹了在Java8與Java7中HashMap源碼實現(xiàn)的對比,內(nèi)容包括HashMap 的原理簡單介紹、結(jié)合源碼在Java7中是如何解決hash沖突的以及優(yōu)缺點,結(jié)合源碼以及在Java8中如何解決hash沖突,balance tree相關(guān)源碼介紹,需要的朋友可以參考借鑒。2017-01-01
Java實現(xiàn)作業(yè)調(diào)度的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Java實現(xiàn)SJF算法調(diào)度,要求測試數(shù)據(jù)可以隨即輸入或從文件中讀入,文中的示例代碼講解詳細(xì),需要的可以參考一下2023-04-04
SpringBoot集成Spring Security的方法
Spring security,是一個強(qiáng)大的和高度可定制的身份驗證和訪問控制框架。這篇文章主要介紹了SpringBoot集成Spring Security的操作方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
selenium + ChromeDriver安裝及使用方法
這篇文章主要介紹了selenium + ChromeDriver安裝及使用方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06
TransmittableThreadLocal線程間傳遞邏輯示例解析
這篇文章主要介紹了TransmittableThreadLocal線程間傳遞邏輯示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06

