引言
上一篇把Dom4j遍历xml文件的所有节点和属性分享了一下,这篇我就简单明了的分享一下,对xml文件的各个节点及属性进行增、删、改的操作并写入新的或者保存到xml文件中,下边的代码很详细,注释很明了,大家一看即可了解。
张三
/**
* 获取文件的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();
}
过程中一定注意编码的问题,如代码里所注释的,否则汉字很容易出现乱码。
张三
新增节点的内容
转载请注明—作者:Java我人生(陈磊兴)原文出处:http://blog.csdn.net/chenleixing/article/details/44356837