根据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节点中的值的更多相关文章

  1. Linux命令行批量替换多文件中的字符串【转】

    Linux命令行批量替换多文件中的字符串[转自百度文库] 一种是Mahuinan法,一种是Sumly法,一种是30T法分别如下: 一.Mahuinan法: 用sed命令可以批量替换多个文件中的字符串. ...

  2. 读取的XML节点中带有冒号怎么办?

    读取的XML节点中带有冒号怎么办? 昨天,编程读取XML的时候,遇上了类似下面的一段XML <a:root xmlns:a="http://ww.abc.com/"> ...

  3. 用DOM解析XML ,用xpath快速查询XML节点

    XPath是一种快速查询xml节点和属性的一种语言,Xpath和xml的关系就像是sql语句和数据库的关系.用sql语句可以从数据库中快速查询出东西同样的用xPath也可以快速的从xml中查询出东西. ...

  4. 通过java程序调用ant build.xml配置文件中指定的target

    一.概述 通过ant实现项目的自动化部署,jar包生成,替换,tomcat关停.启动,查看项目日志: 通过java程序调用已编辑好的ant脚本build.xml配置文件中指定的target: 文中文件 ...

  5. asp.net批量删除XML节点失败的原因及解决办法

    今天操作XML的时候,用到了批量循环删除节点.出现了问题,即循环未结束,程序就跳出循环.搞了好久才弄明白. 解决前的代码: XmlNodeList items = xn.ChildNodes; //获 ...

  6. PHP批量替换MySql数据库中的数据内容(替换MySql数据库内容源码)

    PHP批量替换MySql数据库内容 UTF-8 1.0版 <?php //声明 //1.本源码开发意图:作者在使用一些CMS建站的时候发现很多CMS把网址写入到数据库了,如果换网址,那么就需要更 ...

  7. 使用SQL命令批量替换WordPress站点中图片的URL链接地址

    本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=689 前言: 本文记录了使用SQL命令批量替换URL的方法以及除了替换URL之外,网站更换图片URL地址所必须的其他 ...

  8. PHP批量替换MySql数据库中的数据内容

    <?php //替换数据库内容类 class replace{ public $dbAddress; //数据库地址 public $dbUser; //数据库用户名 public $dbPwd ...

  9. linux 批量替换所有文件中包含的字符串

    sed -i "s/原来字符串/新字符串/g" `grep 原来字符串 -rl .` 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 ...

  10. Java 程序动态替换 docx 模板中定制值的实现例子

    项目系统中打印功能,导出 word 文档功能是挺常用的,本文介绍自定文档模板,程序实现模板内容中值替代的功能. 模板文件 template.docx ​ 执行 main public static v ...

随机推荐

  1. FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器

    ​AV1是一种新兴的免费视频编码标准,它由开放媒体联盟(Alliance for Open Media,简称AOM)于2018年制定,融合了Google VP10.Mozilla Daala以及Cis ...

  2. Android 13 - Media框架(17)- OpenMax(五)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节最后来了解 OMX_Video.h 以及 OMX_Audio.h 中的内容 1.OMX_Video.h 这里只了解该文件中的 OMX_VIDE ...

  3. Vue3使用Composition API实现响应式

    title: Vue3使用Composition API实现响应式 date: 2024/5/29 下午8:10:24 updated: 2024/5/29 下午8:10:24 categories: ...

  4. iOS 后台录音Tweak实现参考--stackoverflow

    up vote9down voteaccepted +50 "Audio Recorder" is indeed a very simple tweak. The author t ...

  5. 「AntV」X6 自定义vue节点(vue3)

    官方文档 本篇文档只讲解vue3中如何使用,vue2的可以参考下官方文档 安装插件 @antv/x6-vue-shape 添加vue组件 既然使用vue节点,那么我们就需要准备一个vue的组件,这个组 ...

  6. uniapp 返回顶部

    <template> <view> <view class="btn" @tap="toTop" :style="{'d ...

  7. pandas基础--基本功能

    pandas含有是数据分析工作变得更快更简单的高级数据结构和操作工具,是基于numpy构建的. 本章节的代码引入pandas约定为:import pandas as pd,另外import numpy ...

  8. 小米 红米 Redmi MIUI 5G开关

    小米 红米 Redmi MIUI 5G开关 1.打开手机拨号界面输入 *#*#54638#*#* 之后拨号界面底部会显示display 5G network menu (显示5G网络菜单) 注意:先是 ...

  9. mac os 10.15.1 懒人 .CDR

    链接:https://pan.baidu.com/s/1MHbUnHWQuGVE1P36mTjmkQ 提取码:ohlu

  10. git与gitee码云

    1.git分支 在前面我们基本了解Git的使用方法,这一节我们看下GIt重要概念[分支] 背景 例如于超老师在开发一个同性交友网站,刚写到登录功能,代码还没写完,今天先睡觉了,所以就commit提交到 ...