对xml文件的操作,有个很好的开源框架,dom4j,使用了大量的接口,
这里用常用的接口对xml文件进行了满足与xml平常操作需要
创建xml
public static void createDocument(String xmlName) {
Document document = DocumentHelper.createDocument();
Element rootElement = document.addElement("students");// 设置根节点
rootElement.addComment("this is a root");// 添加注释
Element studentElement = rootElement.addElement("student");// 添加子节点
studentElement.addAttribute("name", "kaka");// 添加属性
Element ageElement = studentElement.addElement("age");
ageElement.addText("28");// 添加文本节点
createXml(document, xmlName);
}
public static void createXml(Document document, String xmlName) {
try {
OutputStream out = new FileOutputStream(new File(xmlName));// 输出流
OutputFormat format = OutputFormat.createPrettyPrint();// 格式设置
format.setEncoding("gb2312");
XMLWriter writer = new XMLWriter(out, format);// xml写入流
writer.write(document);// 把document对象写入到文件里
writer.flush();// 刷新
} catch (Exception e) {
System.out.println("程序发生异常");
System.exit(0);
}
}
创建后结果为:
<?xml version="1.0" encoding="gb2312"?> <students> <!--this is a root--> <student name="kaka"> <age>28</age> </student> </students>
修改xml文件
public static void modifyXMLFile(String fileName) {
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read(new File(fileName));// 读取xml文档
List<?> listAttribute = document
.selectNodes("/students/student/@name");// 用xpath查找节点student的属性
for (int i = 0; i < listAttribute.size(); i++) {
Attribute attribute = (Attribute) listAttribute.get(i);
if (attribute.getValue().equals("kaka")) {
attribute.setValue("C罗");
}
}
List<?> listElement = document.selectNodes("/students/student/age");// 用于查找节点age的内容
for (int i = 0; i < listElement.size(); i++) {
Element element = (Element) listElement.get(i);
if (element.getText().equals("28")) {
element.setText("29");
}
}
createXml(document, fileName);
} catch (Exception e) {
System.out.println("发生异常");
System.exit(0);
}
}
修改后结果为:
<?xml version="1.0" encoding="gb2312"?> <students> <!--this is a root--> <student name="C罗"> <age>29</age> </student> </students>
删除文件节点
public static void deleteElement(String fileName) {
SAXReader saxReader = new SAXReader();
try {
Document document = saxReader.read(new File(fileName));// 读取xml文档
List<?> listStuElement = document.selectNodes("/students/student");// 用于查找节点student的内容
for (int i = 0; i < listStuElement.size(); i++) {
Element studentElement = (Element) listStuElement.get(i);//每个student节点信息存下来
List<?> listAgeElement = studentElement.selectNodes("age");//当前student节点下age节点
for(int j=0;j<listAgeElement.size();j++){
Element age = (Element) listAgeElement.get(j);
if(age.getText().equals("29")){
studentElement.remove(age);//删除节点
}
}
}
createXml(document, fileName);
} catch (Exception e) {
System.out.println("发生异常");
System.exit(0);
}
}
删除节点结果为:
<?xml version="1.0" encoding="gb2312"?>
<students>
<!--this is a root-->
<student name="C罗"></student>
</students>