Java?根據(jù)XPATH批量替換XML節(jié)點中的值
更新時間:2022年09月27日 08:32:41 作者:授客
這篇文章主要介紹了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>詳細地址</ReceiverAddress> </OrderReceiverInfo> <OrderItems> <OrderItem> <SkuNo>1001178</SkuNo> <ItemName>保婦康栓1.74g*14粒/盒</ItemName> <ItemQuantity>1</ItemQuantity> </OrderItem> <OrderItem> <SkuNo>1008766</SkuNo> <ItemName>美團小藥箱</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文件轉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文檔轉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字符串轉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(); } } }
到此這篇關于Java 根據(jù)XPATH批量替換XML節(jié)點中的值的文章就介紹到這了,更多相關Java替換XML節(jié)點值內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot整合Druid數(shù)據(jù)庫連接池的方法
Druid是Java語言中最好的數(shù)據(jù)庫連接池。Druid能夠提供強大的監(jiān)控和擴展功能。這篇文章主要介紹了SpringBoot整合Druid數(shù)據(jù)庫連接池的方法,需要的朋友可以參考下2020-07-07SpringBoot使用log4j2將日志記錄到文件及自定義數(shù)據(jù)庫的配置方法
這篇文章主要介紹了SpringBoot使用log4j2將日志記錄到文件及自定義數(shù)據(jù)庫的配置方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-03-03