Dom4j解析xml文件-操作节点跟属性及写入其他xml文件

Dom4j解析xml文件-操作节点和属性及写入其他xml文件

引言

       上一篇把Dom4j遍历xml文件的所有节点和属性分享了一下,这篇我就简单明了的分享一下,对xml文件的各个节点及属性进行增、删、改的操作并写入新的或者保存到xml文件中,下边的代码很详细,注释很明了,大家一看即可了解。

测试的xml文件test2.xml

<?xml version="1.0" encoding="UTF-8"?>

<root> 
  <user editor="chenleixing" date="2015-02-15"> 
    <name>张三</name> 
  </user>  
</root>


创建File对象获取Document和根节点

        /**
	 * 获取文件的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到新文件或源文件

        以上对节点的添加、属性的修改都是还停留在内存当中,还未真正保存到文件里即原文件里的内容至此还未发生变化,等把内存的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>

Dom4j解析xml文件-递归遍历所有节点和属性
 

转载请注明—作者:Java我人生(陈磊兴)   原文出处:http://blog.csdn.net/chenleixing/article/details/44356837

       最后,认真看过的网友们,大神们,如有感觉我这个程序猿有哪个地方说的不对或者不妥或者你有很好的议或者建议或点子方法,还望您大恩大德施舍n秒的时间留下你的宝贵文字(留言),以便你,我,还有广大的程序猿们更快地成长与进步.......