本文代码以 xml 是以字符串的形式。
如果需要以文件的形式进行替换,自行将 inputStream 更换为所需读取的 xml 文件即可。
attributes 代表属性名字和替换值的映射。
/**
* 替换xml中某个元素中的属性配置
* @param xmlString
* @return
*/
public static String XmlAttributeReplacement(String xmlString, String elementName, Map<String, String> attributes){
InputStream inputStream = null;
try {
// 创建一个 DocumentBuilderFactory 实例
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 使用 DocumentBuilderFactory 创建 DocumentBuilder 对象
DocumentBuilder builder = factory.newDocumentBuilder();
// 将 XML 字符串转换为输入流
inputStream = new ByteArrayInputStream(xmlString.getBytes());
// 使用 DocumentBuilder 对象解析 XML 输入流并获取 Document 对象
Document document = builder.parse(inputStream);
// 获取根元素
Element rootElement = document.getDocumentElement();
// 查找需要替换属性的元素
Element targetElement = findElement(rootElement, elementName);
if (targetElement != null) {
for (Map.Entry<String, String> attribute : attributes.entrySet()){
// 替换属性
String attributeName = attribute.getKey();
// 驼峰命名更改为横线连接命名
attributeName = WordUtils.uncapitalize(attributeName).replaceAll("(\\B[A-Z])", "-$1").toLowerCase();
String newValue = attribute.getValue();
targetElement.setAttribute(attributeName, newValue);
}
}
// 将修改后的 DOM 对象转换为 XML 字符串
StringWriter stringWriter = new StringWriter();
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult(stringWriter));
return stringWriter.toString();
} catch (ParserConfigurationException | IOException | TransformerException | SAXException e) {
log.error(e.getMessage(), e);
return null;
} finally {
if (inputStream != null){
try {
inputStream.close();
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
}
private static Element findElement(Element parentElement, String elementName) {
NodeList nodeList = parentElement.getElementsByTagName(elementName);
if (nodeList.getLength() > 0) {
return (Element) nodeList.item(0); // 返回第一个匹配的元素
}
return null; // 没有找到匹配的元素
}