一,创建xml文档
//创建一个xml
public void createXML() throws IOException{
Document document = DocumentHelper.createDocument();
//由document创建根节点
Element root = document.addElement("struts");
Element element_package = root.addElement("package");
//设置属性值
element_package.addAttribute("name", "base");
element_package.addAttribute("namespace", "/");
element_package.addAttribute("extends", "struts-default");
Element element_action = element_package.addElement("action");
element_action.addAttribute("name", "empAction_show");
element_action.addAttribute("class", "empAction");
element_action.addAttribute("method", "show");
Element element_result = element_action.addElement("result");
element_result.addAttribute("name", "success");
element_result.addAttribute("type", "redirect");
//设置标签内容
element_result.setText("/show.jsp");
Element element_action2 = element_package.addElement("action");
element_action2.addAttribute("name", "empAction_login");
element_action2.addAttribute("class", "empAction");
element_action2.addAttribute("method", "login");
Element element_result2 = element_action2.addElement("result");
element_result2.addAttribute("name", "login");
element_result2.addAttribute("type", "dispacher");
//设置标签内容
element_result2.setText("/login.jsp");
//用一定的格式输出
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gbk");//设置编码防止中文乱码
XMLWriter writer = new XMLWriter(new FileWriter(new File("src/struts.xml")),format);
writer.write(document);
writer.close();
}
二,读xml文档,返回document对象
//读取一个xml文档,返回一个document对象
public Document readXML() throws DocumentException{
//实例一个reader
//可以是dom 和 sax ,由于两者实现的接口是一样的,所以实例化也是一样的
SAXReader reader = new SAXReader();
//读入一个xml,返回一个document,在这里的位置默认是和webroot是同一级别
//可以使用WebRoot/XXX.xml来得到
Document document = reader.read(new File("src/struts.xml"));
return document ;
}
三,得到根节点
//得到根节点
public Element getRoot(Document document){
return document.getRootElement();
}
四,新增节点和数据
注意:对于一个存在的xml文件进行增加或者修改,一定要在最后把修改后的document重新写入到xml文件中,要不修改的内容不会生效
//创建一个xml
public void createXML() throws IOException{
//将文档读进来
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/struts.xml"));
//得到根节点
Element root = document.getRootElement();
//因为addElement() 返回的是一个Element,所以可以多级一起添加
//root.addElement("package").addElement("action").addElement("result")
Element element_package = root.addElement("package");
//设置属性值
element_package.addAttribute("name", "base");
element_package.addAttribute("namespace", "/");
element_package.addAttribute("extends", "struts-default");
Element element_action = element_package.addElement("action");
element_action.addAttribute("name", "empAction_show");
element_action.addAttribute("class", "empAction");
element_action.addAttribute("method", "show");
Element element_result = element_action.addElement("result");
element_result.addAttribute("name", "success");
element_result.addAttribute("type", "redirect");
//设置标签内容
element_result.setText("/show.jsp");
//要重新写到修改的xml文件中,要不不会生效
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gbk");//设置编码防止中文乱码
XMLWriter writer = new XMLWriter(new FileWriter(new File("src/struts.xml")),format);
writer.write(document);
writer.close();
}
五,控制台输出xml
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/struts.xml"));
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("gbk");
//输出流用System.out
XMLWriter writer = new XMLWriter(System.out,outputFormat);
writer.write(document);
writer.close();
六,写入到一个xml文件
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/struts.xml"));
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("gbk");
//和上面的在控制太输出是一样的,只是输出流是输出到一个xml文件中
XMLWriter writer = new XMLWriter(new FileWriter(new File("WebRoot/person.xml")),outputFormat);
writer.write(document);
writer.close();
七,遍历节点
//遍历节点
public void loopNodes() throws DocumentException{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/struts.xml"));
Element root = document.getRootElement();
//循环根节点下的直接子节点
for(Iterator iter = root.elementIterator();iter.hasNext();){
Element element = (Element) iter.next();
System.out.println(element.getName());
}
}
八,修改节点属性
/ ——从根节进行选择
//——选择文档中相吻合的节而不管其在文档的何处
. ——选择当前节
..——当前节的父节
@——选择属性
注意:对于一个存在的xml文件进行增加或者修改,一定要在最后把修改后的document重新写入到xml文件中,要不修改的内容不会生效
public void alterNode() throws DocumentException, IOException{
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/struts.xml"));
//得到一个节点
// Node node = document.selectSingleNode("//action");
// String methodName = node.valueOf("@method");
//得到多个节点
List list = document.selectNodes("/struts/package/action");
for (Iterator iter = list.iterator() ; iter.hasNext();) {
Element element =(Element) iter.next();
//得到节点的属性:element.attribute("..");
//得到节点下的子节点:element.element("..");
//得到节点的父节点:elements.getParent();
if (element.attribute("method").getValue().equals("show")) {
element.attribute("method").setValue("showEmps");
break;
}
}
//查找节点下的属性
List list2 = document.selectNodes("/struts/package/action/@name");
for (Iterator iter = list2.iterator() ; iter.hasNext();) {
Attribute attribute = (Attribute) iter.next();
if (attribute.getValue().equals("empAction_show")) {
attribute.setValue("empAction_showEmps");
break;
}
}
//一定要记得修改后把document从新写入到xml文件中
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("gbk");//设置编码防止中文乱码
XMLWriter writer = new XMLWriter(new FileWriter(new File("src/struts.xml")),format);
writer.write(document);
writer.close();
}
九,删除节点
//删除一个节点
List list2 =document.selectNodes("/struts/package/action/result");
for (Iterator iter = list2.iterator();iter.hasNext(); ) {
Element element =(Element) iter.next();
//得到节点的属性:element.attribute("..");
//得到节点下的子节点:element.element("..");
//得到节点的父节点:elements.getParent();
if(element.attribute("name").getValue().equals("/success.jsp")){
//注意,要删除的话,只能是父节点删除直接子节点,而不是间接子节点 root.remove(element.getParent());
}
}
注意:对于删除节点和新增以及修改节点是一样的,也要在最后重新写出到修改的xml文件中