dom4j的基本操作

package com.bsoft.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Iterator;
import java.util.List;

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

public class documentTest {
	
	private static String path="routeTest.xml";
	
	public static void main(String[] args) throws DocumentException {
		//addXml();
		edit(path);
	}
	
	/**
	 * 新增一个dom4j的xml文件
	 * @return
	 */
	public static Document addXml(){
		Document document = DocumentHelper.createDocument();
		Element routeElement = document.addElement("route");
		Element stepsElement = routeElement.addElement("steps");
		Element stratElement = stepsElement.addElement("strat");
		stratElement.addAttribute("id", "5").addAttribute("inputName", "test2");
		Element rpcElement = stratElement.addElement("rpc");
		rpcElement.addAttribute("id", "1").addAttribute("rpcName", "hai.c000005").addAttribute("returnable", "true");
		return document;
	}
	
	/**
	 * 操作xml文件	
	 * @param filename
	 * @return
	 * @throws DocumentException 
	 * @throws DocumentException
	 */
	public static void edit(String filename) throws DocumentException{
//		Document document = modiferAtt(filename);
//		Document document = modiferNode(filename);
//		Document document = addNode(filename);
//		Document document = deleteNode(filename);
//		Document document = addXml();
		traverseNode(path);
//		XMLWriter writer;
//		try {
//			//格式化xml文档
//			OutputFormat format = OutputFormat.createPrettyPrint();
//			//指定XML编码
//			format.setEncoding("utf-8");
//			writer= new XMLWriter(new OutputStreamWriter(new FileOutputStream(path), format.getEncoding()),format);
			writer = new XMLWriter(new FileWriter(new File(path)));
//			writer.write(document);
//			writer.close();
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
	}
	
	
	/**
	 * 修改xml的属性
	 * @param filename
	 * @return
	 * @throws DocumentException
	 */
	public static Document modiferAtt(String filename) throws DocumentException{
		SAXReader reader = new SAXReader();
		Document document = reader.read(new File(path));
		List<?> list = document.selectNodes("/route/steps/strat/@inputName");
		Iterator<?> iter = list.iterator();
		while(iter.hasNext()){
			Attribute attribute = (Attribute)iter.next();
			if(attribute.getValue().equals("test2")){
				attribute.setValue("test3");
			}
		}
		return document;
	}
	
	/**
	 * 修改xml的节点
	 * @param filename
	 * @return
	 * @throws DocumentException
	 */
	public static Document modiferNode(String filename) throws DocumentException{
		SAXReader reader = new SAXReader();
		Document document = reader.read(new File(path));
		List<?> list = document.selectNodes("/route/steps/strat333");
		Iterator<?> iter = list.iterator();
		while(iter.hasNext()){
			Element element = (Element)iter.next();
			element.setName("strat");//修改节点的属性,把strat修改为start333
			//element.setText("strat333");//修改节点的内容
		}
		return document;
	}
	
	/**
	 * 添加节点
	 * @param filename
	 * @return
	 * @throws DocumentException
	 */
	public static Document addNode(String filename) throws DocumentException{
		SAXReader reader = new SAXReader();
		Document document = reader.read(new File(path));
		List<?> list = document.selectNodes("/route/steps/strat");
		Iterator<?> iter = list.iterator();
		while(iter.hasNext()){
			Element stratElement = (Element)iter.next();
			Element rpcElement = stratElement.addElement("rpc");
			rpcElement.addAttribute("id", "1").addAttribute("rpcName", "hai.c000005").addAttribute("returnable", "true");
		}
		return document;
	}
	
	/**
	 * 删除节点
	 * @param filename
	 * @return
	 * @throws DocumentException
	 */
	public static Document deleteNode(String filename) throws DocumentException{
		SAXReader reader = new SAXReader();
		Document document = reader.read(new File(path));
		List<?> list = document.selectNodes("/route/steps/strat");
		Iterator<?> iter = list.iterator();
		while(iter.hasNext()){
			Element stratElement = (Element) iter.next();
			Iterator<?> rpcIter = stratElement.elementIterator("rpc");//通过strat找到rpc节点
			while(rpcIter.hasNext()){//迭代rpc节点
				Element rpcElement = (Element)rpcIter.next();
				if(rpcElement.attribute("id").getValue().equals("1")){//通过element中的属性来比较
					stratElement.remove(rpcElement);
				}
			}
		}
		
		return document;
	}
	
	/**
	 * 遍历节点
	 * @param filename
	 * @throws DocumentException
	 */
	public static void  traverseNode(String filename) throws DocumentException{
		SAXReader reader = new SAXReader();
		Document document = reader.read(new File(path));
		Element root = document.getRootElement();
		Element node = root.element("steps");
		buildElement(node);
	}
	
	public static void buildElement(Element node){
		if(!node.getName().equals("steps")){
			printElement(node);
		}
		for(Object oelement:node.elements()){
			buildElement((Element) oelement);
		}
	}
	
	
	public static void printElement(Element node){
		System.out.println(node.getName());
	}
	
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值