java读取XML文件小结
java读取XML文件
最近开发碰到对XML文件进行解析,查找了很多资料,总结一个自己喜欢用的一种模式,java代码如下:
SAXReader reader = new SAXReader();
String rootPath = System.getProperty("user.dir").replace("\\", "/");
//File file = new File(rootPath+"/config.xml");
File file = new File("src\\main\\resources\\config.xml");
System.out.println(rootPath + "/config.xml");
Document document = reader.read(file);
Element root = document.getRootElement();
List<Element> childElements = root.elements();
ArrayList<ProcessDev> processDevArrayList=new ArrayList<>();
//ProcessDev processDev=new Process
for (Element child : childElements) {
//已知属性名情况下
String id =child.attributeValue("id");
String time=child.elementText("restime");
String name=child.elementText("name");
List<Element> processnamesXml=child.element("processnames").elements();
ArrayList<String> processnames=new ArrayList<>();
for(Element el_processname : processnamesXml){
processnames.add(el_processname.getText());
}
xml文件结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<!--一个config代表一个设备-->
<config id="105">
<restime>60</restime>
<url>http://127.0.0.1:80</url>
<name>fdf</name>
<processnames>
<processname>Code.exe</processname>
<processname>chrome.exe</processname>
</processnames>
<flag>true</flag>
</config>
<config id="106">
<restime>60</restime>
<url>http://127.0.0.1:80</url>
<name>FIR</name>
<processnames>
<processname>QQMusic.exe</processname>
</processnames>
<flag>true</flag>
</config>
</configs>
java修改XML文件
修改XML文件代码如下,通过对XML修改将内存的内容写入文件中:
public static ProcessDev ModifyXMLFile(String json) throws DocumentException, IOException {
try {
JSONObject jsonObject = JSONObject.fromObject(json);
String time = jsonObject.getString("time");
String name = jsonObject.getString("name");
String URI = jsonObject.getString("URI");
List<String> processnames= jsonObject.getJSONArray("processnames");
String flag = jsonObject.getString("flag");
String id = jsonObject.getString("id");
ProcessDev person = new ProcessDev(processnames, URI, Integer.parseInt(time), Boolean.valueOf(flag),name);
person.setId(id);
String rootPath = System.getProperty("user.dir").replace("\\", "/");
//File file = new File(rootPath + "/config.xml");
File file = new File("src\\main\\resources\\config.xml");
SAXReader reader = new SAXReader();
Document document = reader.read(file);
Element root = document.getRootElement();
List<Element> childElements = root.elements();
for (Element child : childElements) {
if(child.attributeValue("id").equals(id)) {
Element restime = child.element("restime");
restime.setText(time);
Element url = child.element("url");
url.setText(URI);
if(processnames.size()!=0) {
List<Element> processnamesXml = child.elements("processnames");
for (int i = 0; i < processnamesXml.size(); i++) {
// System.out.println();
processnamesXml.get(i).element("processname").setText(processnames.get(i));
}
}
Element fl = child.element("flag");
fl.setText(flag);
}
}
document.setRootElement(root);
saveDocument(document, file);
return person;
}catch (Exception E){
System.out.println(E.getMessage());
return null;
}
}
public static void saveDocument(Document document, File xmlFile) throws IOException, FileNotFoundException {
Writer osWrite = new OutputStreamWriter(new FileOutputStream(xmlFile));// 创建输出流
OutputFormat format = OutputFormat.createPrettyPrint(); // 获取输出的指定格式
format.setEncoding("UTF-8");// 设置编码 ,确保解析的xml为UTF-8格式
XMLWriter writer = new XMLWriter(osWrite, format);// XMLWriter
// 指定输出文件以及格式
writer.write(document);// 把document写入xmlFile指定的文件(可以为被解析的文件或者新创建的文件)
writer.flush();
writer.close();
}
```