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());
}
}
dom4j的基本操作
最新推荐文章于 2022-12-14 13:31:11 发布