Java 根据XPATH批量替换XML节点中的值
根据XPATH批量替换XML节点中的值
by: 授客 QQ:1033553122
测试环境
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>蓬江区</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节点值
public static void replaceXmlNodeValue(Document doc, String nodePath, String value) throws XPathExpressionException {
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
// 匹配需替换的节点
NodeList nodeList = (NodeList) xpath.evaluate(nodePath, doc, XPathConstants.NODESET);
// 单个XPATH可能匹配多个XML节点,所以需要遍历替换
for (int i = 0; i < nodeList.getLength(); i++) {
nodeList.item(i).setTextContent(value);
}
}
// 批量多个XPATH指定的XML节点值
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, "吉祥街道幸福社区1号大楼23号");
String newXml = XMLHelper.docToString(doc);
System.out.println(newXml);
} catch (Exception e) {
e.printStackTrace();
}
}
}
文字过少占位符,可无视
文字过少占位符,可无视
文字过少占位符,可无视
文字过少占位符,可无视
文字过少占位符,可无视
文字过少占位符,可无视
文字过少占位符,可无视
文字过少占位符,可无视
文字过少占位符,可无视
Java 根据XPATH批量替换XML节点中的值的更多相关文章
- Linux命令行批量替换多文件中的字符串【转】
Linux命令行批量替换多文件中的字符串[转自百度文库] 一种是Mahuinan法,一种是Sumly法,一种是30T法分别如下: 一.Mahuinan法: 用sed命令可以批量替换多个文件中的字符串. ...
- 读取的XML节点中带有冒号怎么办?
读取的XML节点中带有冒号怎么办? 昨天,编程读取XML的时候,遇上了类似下面的一段XML <a:root xmlns:a="http://ww.abc.com/"> ...
- 用DOM解析XML ,用xpath快速查询XML节点
XPath是一种快速查询xml节点和属性的一种语言,Xpath和xml的关系就像是sql语句和数据库的关系.用sql语句可以从数据库中快速查询出东西同样的用xPath也可以快速的从xml中查询出东西. ...
- 通过java程序调用ant build.xml配置文件中指定的target
一.概述 通过ant实现项目的自动化部署,jar包生成,替换,tomcat关停.启动,查看项目日志: 通过java程序调用已编辑好的ant脚本build.xml配置文件中指定的target: 文中文件 ...
- asp.net批量删除XML节点失败的原因及解决办法
今天操作XML的时候,用到了批量循环删除节点.出现了问题,即循环未结束,程序就跳出循环.搞了好久才弄明白. 解决前的代码: XmlNodeList items = xn.ChildNodes; //获 ...
- PHP批量替换MySql数据库中的数据内容(替换MySql数据库内容源码)
PHP批量替换MySql数据库内容 UTF-8 1.0版 <?php //声明 //1.本源码开发意图:作者在使用一些CMS建站的时候发现很多CMS把网址写入到数据库了,如果换网址,那么就需要更 ...
- 使用SQL命令批量替换WordPress站点中图片的URL链接地址
本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=689 前言: 本文记录了使用SQL命令批量替换URL的方法以及除了替换URL之外,网站更换图片URL地址所必须的其他 ...
- PHP批量替换MySql数据库中的数据内容
<?php //替换数据库内容类 class replace{ public $dbAddress; //数据库地址 public $dbUser; //数据库用户名 public $dbPwd ...
- linux 批量替换所有文件中包含的字符串
sed -i "s/原来字符串/新字符串/g" `grep 原来字符串 -rl .` 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 ...
- Java 程序动态替换 docx 模板中定制值的实现例子
项目系统中打印功能,导出 word 文档功能是挺常用的,本文介绍自定文档模板,程序实现模板内容中值替代的功能. 模板文件 template.docx 执行 main public static v ...
随机推荐
- 详解Spring循环依赖
一. 什么是循环依赖 循环依赖,就是两个或则两个以上的bean互相依赖对方,最终形成闭环.比如"A对象依赖B对象,而B对象也依赖A对象",或者"A对象依赖B对象,B对象依 ...
- Swift全局变量的线程安全分析
一.示例代码 import UIKit let obj = TestObj() class TestObj { init() { print("\(type(of: self)) init& ...
- Cmockery学习
什么是cmockery? 是一个轻量级的C语言单元测试框架 什么是单元测试? 单元测试就是测试一个系统的最小实现单元,往往是函数 示例解析 #include <stdarg.h> #inc ...
- docker构建镜像——Dockerfile
from RUN CMD EXPOSE LABEL ENV COPY 格式 COPY [--chown=<用户>:<组>]<源>...<目的> COPY ...
- kettle从入门到精通 第四十四课 kettle 去重
1.我们平常在写应用程序的时候,会有去重的业务场景,可以在数据库层面解决,也可以在内存层面解决. 同样kettle也有去重的步骤[唯一行(哈希值)]和[去除重复记录] 唯一行(哈希值):使用 Hash ...
- Win11系统下的MindSpore环境搭建
技术背景 笔者尝试过不少编程环境搭建的方案,例如常见的Ubuntu.Deepin.CentOS,也用过很多人力荐的Manjaro,这些发行版在需要办公的条件下,一般都需要结合Windows双系统使用. ...
- json null (空值)不序列化
json null (空值)不序列化 JsonSerializerSettings jsetting = new JsonSerializerSettings(); jsetting.DefaultV ...
- windows 通过cmd命令(netsh wlan命令)连接wifi
引用:https://www.cnblogs.com/moonbaby/p/11188135.html 1)显示本机保存的profiles,配置文件是以wifi的ssid命名的. netsh wlan ...
- 报错解决 :Resolved [org.springframework.web.bind.MissingServletRequestParameterException
报错解决 :Resolved [org.springframework.web.bind.MissingServletRequestParameterException 解决方法:RequestPar ...
- Hibernate Validator 校验注解
Hibernate Validator 校验注解/** * 认识一些校验注解Hibernate Validator * * @NotNull 值不能为空 * @Null 值必须为空 * @Patter ...