studentname
当前位置:文档之家› 使用DOM4j解析xml文件

使用DOM4j解析xml文件

Xml文件:<?xml version="1.0" encoding="UTF-8"?><student><!--first xml--><call show="no"><name>studentname</name><English>78</English><Chinese>78</Chinese><Japan>98</Japan></call><call show="no"><name>studentname</name><English>77</English><Chinese>68</Chinese><Japan>88</Japan></call></student>JAVA文件:import java.io.File;import java.io.FileWriter;import java.io.IOException;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;/***DOM4j对xml文件的操作*操作DOM4j的时候注意要导入3个jar包,否则会报异常*dom4j-1.6.1.jar*jaxen-1.1-beta-6.jar*saxpath.jar**/public class ReaderDom4j {/***创建一个xml文件**/public static void createxml() {//使用 DocumentHelper 类创建一个文档实例。

DocumentHelper 是生成 XML 文档节点的 dom4j API 工厂类。

Document document = DocumentHelper.createDocument();//使用 addElement() 方法创建根元素 studentElement booksElement = document.addElement("student");booksElement.addComment("first xml");//在 student 元素中使用 addElement() 方法增加 call 元素。

Element book1Elment = booksElement.addElement("call");//在call元素里增加show属性,show属性的值是yesbook1Elment.addAttribute("show", "yes");//在 call 元素中使用 addElement() 方法增加 name 元素。

Element book2Element = book1Elment.addElement("name");//设置name标签的内容book2Element.setText("zhangsan");Element book3Element = book1Elment.addElement("English");book3Element.setText("78");Element book4Element = book1Elment.addElement("Chinese");book4Element.setText("78");Element book5Element = book1Elment.addElement("Japan");book5Element.setText("98");book1Elment = booksElement.addElement("call");book1Elment.addAttribute("show", "yes");book2Element = book1Elment.addElement("name");book2Element.setText("wangwu");book3Element = book1Elment.addElement("English");book3Element.setText("77");book4Element = book1Elment.addElement("Chinese");book4Element.setText("68");book5Element = book1Elment.addElement("Japan");book5Element.setText("88");try {//格式化输出xml文件,兼容ie的格式化输出OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("UTF-8");//把xml文件从内存中写入文件XMLWriter writer = new XMLWriter(new FileWriter("myxml.xml"), format);writer.write(document);writer.close();} catch (IOException e) {e.printStackTrace();}}@SuppressWarnings("unchecked")/***对xml文件的修改操作*修改xml文件以后要重新把xml文件从内存中写入文件,否则修改的只是内存中的xml,实际文件不会改变*DOM4j操作xml文件是一次性把所有数据读入内存中,所以xml文件过大不能用dom4j去解析**/public static void modifyxml(){//使用SAXReader去解析xml文件SAXReader reader=new SAXReader();Document document;try {File file = new File("C:\\workspace\\Test\\myxml.xml");//获取document对象document=reader.read(file);//通过selectNodes寻找节点或者属性List list=document.selectNodes("/student/call/@show");Iterator it=list.iterator();while(it.hasNext()){//Attribute属性的操作方法Attribute attribute=(Attribute)it.next();if(attribute.getValue().equals("yes")){a ttribute.setValue("no");}}list =document.selectNodes("/student/call/name");it=list.iterator();while(it.hasNext()){//标签内容的操作方法Element nameElment=(Element)it.next();nameElment.setText("studentname");}//删除某个节点是要用两层循环,因为删除当前节点必须用父节点去删除。

list=document.selectNodes("/student/call");it=list.iterator();while(it.hasNext()){//获取父节点Element scoreElement=(Element)it.next();System.out.println(scoreElement);@SuppressWarnings("unused")//获取该父节点下面的需要查找的子节点Iterator itera=scoreElement.elementIterator("English");while(itera.hasNext()){Element scoreEnglish=(Element)itera.next();if(scoreEnglish.getText().equals("77")){//利用父节点去删除scoreElement.remove(scoreEnglish);}}}@SuppressWarnings("unused")/* Iteratoritera=document.getRootElement().elementIterator("call");while(itera.hasNext()){Element ele=(Element)itera.next();System.out.println(ele);}*/OutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("UTF-8");XMLWriter writer;try {writer = new XMLWriter(new FileWriter("myxml.xml"),format);writer.write(document);writer.close();} catch (IOException e) {e.printStackTrace();}} catch (DocumentException e) {e.printStackTrace();}}public static void main(String args[]){ReaderDom4j.createxml();ReaderDom4j.modifyxml();}}总结如下:创建xml文件获取document对象Document document =DocumentHelper.createDocument();创建节点父节点.addElement(“子节点”);创建节点的内容节点.setText(“内容”);创建节点的属性及内容节点.addAttribute(“属性名”,”属性值”);修改xml的操作获取SAXReader的对象SAXReader reader=new SAXReader();获取document对象Document document=reader.read(new File(“路径名”))获取根节点document.getRootElement();获取根节点一下的某个节点的迭代Iterator it= document.getRootElement().elementIterator();获取元素迭代器Iterator it=document.selectNodes(“/student/call/name/@show”);(获取根节点一下call节点一下Name节点的属性show的值)修改属性的值attribute.setValue();修改标签的内容element.setText();删除便签父节点.remove(子节点);。

相关主题