现在的位置: 首页 > 综合 > 正文

Java_xml_dom4j对xml文件增删读写操作

2013年11月11日 ⁄ 综合 ⁄ 共 2987字 ⁄ 字号 评论关闭

Download dom4j-1.6.1.zip开发工具和帮助文档

 

1.DOM4J关系图

2.增删读写相关源码

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class Test {

	/**
	 * http://blog.csdn.net/strawberry2013
	 * Strawberry2013-5-23
	 */
	public static void main(String[] args) throws Exception {

/*
 * 通过集合的方式 增删改查 标签和属性,将一个父标签下的子标签装入一个集合中,然后通过增删修改集合达到修改xml文档的目的!
 */
		SAXReader reader = new SAXReader(); // 读取文档
		Document document = reader.read(new File("src/readWrite.xml"));
		// 查找需要的标签,使用xPath,可以最大方便的查找
		List<Element> list = document.selectNodes("//name");// 该xPath意为寻找所有的name标签
		for (int i = 0, size = list.size(); i < size; i++) {
			if (list.get(i).getText().equals("http://blog.csdn.net/strawberry2013")) {
				// 增删改查均对List集合进行操作
				Element parentElement = list.get(i).getParent(); // 得到父节点
				List<Element> elements = parentElement.elements(); // 得到父节点下的所有子节点

				Element newElement = DocumentHelper.createElement("num");// 新建标签
				newElement.setText("Java");
				elements.add(2, newElement); 			// 标签--增
				elements.remove(2); 					// 标签--删
				elements.set(2, newElement); 			// 标签--改
				elements.get(i); 						// 标签--查
			}
		}
		Element currentElement = list.get(0);
		List<Attribute> attributes = currentElement.attributes();
		for (int i = 0, size = attributes.size(); i < size; i++) {
			if (attributes.get(i).getName() == "color") {
				Attribute attr = DocumentHelper.createAttribute(currentElement,
						"color", "Green");
				// attributes.add(attr); 				//属性--增
				attributes.remove(i); 					//属性--删
				// attributes.set(i, attr); 			//属性--改
				// attributes.get(i); 					//属性--查
			}
		}
/*
 * 通过dom4j特有的属性和方法,更简单一些
 */
		Element childElement = list.get(0); 				// 父节点
		Element parentElement = childElement.getParent(); 	// 子节点
		parentElement.addElement("num").setText("Info"); 			// 标签--增
		parentElement.remove(childElement); 						// 标签--删
		childElement.setText("OKKK");								// 标签--改查
		// 与之有关的方法setName(),setText(),getName(),getText()

		String country = "China";
		currentElement = childElement;
		List<Attribute> attributes = currentElement.attributes();
		Attribute attr = DocumentHelper.createAttribute(childElement,
				"country", country);
		// if(parent.attribute("country") == null){//判断属性是否存在
		// parent.add(attr); 
		// }else{
		childElement.setAttributeValue("country", country); //}		// 属性--改
		// parent.add(attr); 										// 属性--增
		attributes.remove(1); 										// 属性--删
		attributes.get(0); 											// 属性--查

		//将数据写到文档中去
		OutputFormat format = OutputFormat.createPrettyPrint();// 新建漂亮的格式输出对象
		format.setEncoding("UTF-8");// 设置打印的编码,该编码应该和xml文档编码类型一致
		XMLWriter writer = new XMLWriter(new FileOutputStream(
				"src/readWrite.xml"), format);// 注意,FileWriter字符流以默认的Gbk编码
		writer.write(document);	//写入
		writer.close();			//关闭
	}
}
<?xml version="1.0" encoding="UTF-8"?>

<book> 
  <sale> 
    <books id="001" country="Chinaxsxs"> 
      <name id="21" color="red">http://blog.csdn.net/strawberry2013</name>  
      <author>张三</author>  
      <price>20</price>  
      <description>该书简介</description>  
      <num>222</num>  
      <num>22sss</num>  
      <num>22sss</num> 
    </books>  
    <books id="002"> 
      <name>java语法</name>  
      <author>李四</author>  
      <price>30.90</price>  
      <description>语法很好</description> 
    </books> 
  </sale> 
</book>

抱歉!评论已关闭.