使用dom4j解析xml文件

gongzhong 贡献于2011-05-18

作者 User  创建于2011-03-24 06:38:00   修改者User  修改于2011-03-24 07:00:00字数4506

文档摘要:
关键词:

Xml文件: studentname 78 78 98 studentname 77 68 88 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() 方法创建根元素 student Element booksElement = document.addElement("student"); booksElement.addComment("first xml"); //在 student 元素中使用 addElement() 方法增加 call 元素。 Element book1Elment = booksElement.addElement("call"); //在call元素里增加show属性,show属性的值是yes book1Elment.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")) { attribute.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") /* Iterator itera=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(子节点);

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档