引言
上一篇把Dom4j遍历xml文件的所有节点和属性分享了一下,这篇我就简单明了的分享一下,对xml文件的各个节点及属性进行增、删、改的操作并写入新的或者保存到xml文件中,下边的代码很详细,注释很明了,大家一看即可了解。
<?xml version="1.0" encoding="UTF-8"?> <root> <user editor="chenleixing" date="2015-02-15"> <name>张三</name> </user> </root>
/** * 获取文件的document对象,然后获取对应的根节点 * @author chenleixing */ @Test public void testGetRoot() throws Exception{ SAXReader sax=new SAXReader();//创建一个SAXReader对象 File xmlFile=new File("d:\\test2.xml");//根据指定的路径创建file对象 Document document=sax.read(xmlFile);//获取document对象,如果文档无节点,则会抛出Exception提前结束 Element root=document.getRootElement();//获取根节点 //this.getNodes(root);//从根节点开始遍历所有节点 this.editAttribute(root,"user");//对指定名字的节点进行属性的添加删除修改 this.addNode(root,"newNode","新增节点的内容");//对指定的节点新增名为newNode的子节点,并指定新增字节的内容 this.saveDocument(document, xmlFile);//把改变的内存中的document真正保存到指定的文件中 }
注意这三个方法:
this.editAttribute(root,"user");//对指定名字的节点进行属性的添加删除修改 this.addNode(root,"newNode","新增节点的内容");//对指定的节点新增名为newNode的子节点,并指定新增字节的内容 this.saveDocument(document, xmlFile);//把改变的内存中的document真正保存到指定的文件中
下边会依依介绍和展现。
此处传入根节点和名为user的节点如最开始的调用this.editAttribute(root,"user"):
/** * 对指定的节点属性进行删除、添加、修改 * @author chenleixing */ public void editAttribute(Element root,String nodeName){ //获取指定名字的节点,无此节点的会报NullPointerException,时间问题不做此情况的判断与处理了 Element node=root.element("user"); Attribute attr=node.attribute("editor");//获取此节点指定的属性,无此节点的会报NullPointerException node.remove(attr);//删除此属性 Attribute attrDate=node.attribute("date");//获取此节点的指定属性 attrDate.setValue("更改");//更改此属性值 node.addAttribute("add","增加");//添加的属性 }
此方法传入根节点,名为newNode的新增节点和对应的新增内容,如开头代码this.addNode(root,"newNode","新增节点的内容"):
/** * 对指定的节点添加子节点和对象的文本内容 * @author chenleixing */ public void addNode(Element node,String nodeName,String content){ Element newNode=node.addElement(nodeName);//对指定的节点node新增子节点,名为nodeName newNode.setText(content);//对新增的节点添加文本内容content }
以上对节点的添加、属性的修改都是还停留在内存当中,还未真正保存到文件里即原文件里的内容至此还未发生变化,等把内存的document的内容写入到对应文件里才可以,如下边代码所示:
/** * 把改变的domcument对象保存到指定的xml文件中 * @author chenleixing * @throws IOException */ public void saveDocument(Document document,File xmlFile) throws IOException{ 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(); }
过程中一定注意编码的问题,如代码里所注释的,否则汉字很容易出现乱码。
<?xml version="1.0" encoding="UTF-8"?> <root> <user date="更改" add="增加"> <name>张三</name> </user> <newNode>新增节点的内容</newNode> </root>
转载请注明—作者:Java我人生(陈磊兴) 原文出处:http://blog.csdn.net/chenleixing/article/details/44356837