开发中遇到需要解析xml文件,同时修改其中的部分内容,最后保存并覆盖原文件。逻辑思路比较简单。下面举个例子。
xml文件内容如下:
<?xml version="1.0"?>
<aa>
<bb>
<cc name="1"/>
</bb>
</aa>
如果要修改上面的内容,则需要DocumentBuilderFactory解析xml文件,然后用Document修改其内容,最后用TransformerFactory生成新的xml文件即可。代码如下:
import java.io.File;
import java.io.FileWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class XmlModifier {
public static void main(String[] args) {
//xml文件的路径
String xmlPath = "";
try {
// 1. 解析XML文件
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File(xmlPath));
// 2. 修改XML值
NodeList nodeList = document.getElementsByTagName("aa"); // 假设要修改的元素标签是"aa"
for (int i = 0; i < nodeList.getLength(); i++) {
Element element = (Element) nodeList.item(i);
element.setAttribute("name", "3");
// element.setTextContent("新的值1"); // 修改元素的内容
}
// 3. 生成新的XML文件
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // 格式化输出
DOMSource source = new DOMSource(document);
//同一文件名则能自动覆盖原文件。
StreamResult result = new StreamResult(new FileWriter(xmlPath));
transformer.transform(source, result);
System.out.println("XML文件已修改并保存为output.xml");
} catch (Exception e) {
e.printStackTrace();
}
}
}
测试情况以每个人的需求稳准,代码是经过我个人测试过的,问题不大。
以上就是解析xml文件获得元素并修改最后保存的内容了。