Dom4j解析XML学习代码

简介:

项目截图:注意导入红色方框内的两个jar包。

三个函数,一个用于创建xml文件,一个用于修改xml文件,一个用于格式化xml文件。

复制代码
import java.io.File;
import java.io.FileWriter;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
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 Dom4jXML {
    public static int createXMLFile(String filename){
        /*返回操作结果*/
        int returnValue = 0;
        /*建立document对象*/
        Document document = DocumentHelper.createDocument();
        /*建立XML文档的根books*/
        Element booksElement = document.addElement("books");
        /*加入一行注释*/
        booksElement.addComment("This is a test for dom4j, ZHe, 2012.11.26");
        /*加入第一个book节点*/
        Element bookElement = booksElement.addElement("book");
        /*加入show属性内容*/
        bookElement.addAttribute("show", "yes");
        /*加入title节点*/
        Element titleElement = bookElement.addElement("title");
        /*为title设置内容*/
        titleElement.setText("Dom4j Tutorials");
        
        /*类似的完成后两个book*/        
        bookElement = booksElement.addElement("book");
        bookElement.addAttribute("show", "yes");
        titleElement = bookElement.addElement("title");
        titleElement.setText("Lucene Studing");
        
        bookElement = booksElement.addElement("book");
        bookElement.addAttribute("show", "no");
        titleElement = bookElement.addElement("title");
        titleElement.setText("Lucene in Action");
        
        /*加入owner节点*/
        Element ownerElement = booksElement.addElement("owner");
        ownerElement.setText("Zhang He");
        
        try{
            /*将document中的内容写入文件中*/
            XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));
            writer.write(document);
            writer.close();
            /*执行成功,返回1*/
            returnValue = 1;
        }catch(Exception ex){
            ex.printStackTrace();
        }
        
        return returnValue;        
    }
    public static int modifyXMLFile(String filename, String newfilename){
        int returnValue = 0;
        try{
            SAXReader saxReader = new SAXReader();
            Document document = saxReader.read(new File(filename));
            
            /*修改内容之一:如果book结点中show属性内容是yes,则修改成no*/
            
            /*先用xpath查找对象*/
            List list = document.selectNodes("/books/book/@show");
            Iterator iter = list.iterator();
            while(iter.hasNext()){
                Attribute attribute = (Attribute)iter.next();
                if(attribute.getValue().equals("yes")){
                    attribute.setValue("no");
                }
            }
            /*             * 
             *修改内容之二:把owner项内容改为CheeseZH
             * 并在owner节点中加入date节点,date节点的内容为2012-11-27
             * 还要为date节点添加一个属性type
             */
            list = document.selectNodes("books/owner");
            iter = list.iterator();
            if(iter.hasNext()){
                Element ownerElement = (Element)iter.next();
                ownerElement.setText("CheeseZH");
                Element dateElement = ownerElement.addElement("date");
                dateElement.setText("2012-11-27");
                dateElement.addAttribute("type", "Gregoran calendar");
            }
            
            /*修改内容之三:若title内容为Dom4j Tutorials,则删除该节点*/
            list = document.selectNodes("/books/book");
            iter = list.iterator();
            while(iter.hasNext()){
                Element bookElement = (Element)iter.next();
                Iterator iterator = bookElement.elementIterator("title");
                while(iterator.hasNext()){
                    Element titleElement = (Element)iterator.next();
                    if(titleElement.getText().equals("Dom4j Tutorials")){
                        bookElement.remove(titleElement);
                    }
                }
            }
            try{
                /*将document中的内容写入文件中*/
                XMLWriter writer = new XMLWriter(new FileWriter(new File(newfilename)));
                writer.write(document);
                writer.close();
                
                /*执行成功,返回1*/
                returnValue = 1;
            }catch(Exception ex){
                ex.printStackTrace();
            }            
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return returnValue;
    }
    public static int formatXMLFile(String filename){
        int returnValue = 0;
        try{
            SAXReader saxReader = new SAXReader();
            Document document = saxReader.read(new File(filename));
            XMLWriter writer = null;
            /*格式化输出,类似IE浏览器一样*/
            OutputFormat format = OutputFormat.createPrettyPrint();
            /*指定XML编码*/
            format.setEncoding("GB2312");
            writer = new XMLWriter(new FileWriter(new File(filename)),format);
            writer.write(document);
            writer.close();
            /*执行成功,返回1*/
            returnValue = 1;
        }catch(Exception ex){
            
        }
        return returnValue;
    }
    public static void main(String[] args){
        createXMLFile("zhanghe.xml");
        modifyXMLFile("zhanghe.xml","CheeseZH.xml");
        formatXMLFile("zhanghe.xml");
    }

}
复制代码

1.创建Document对象(xml对象),用addElement添加根节点(Element对象);

2.Element对象三个重要方法:

addComment:添加注释

addAttribute:添加属性

addElement:添加子元素

3.XMLWriter用于生成物理文件,默认使用OutputFormat类的createCompactFormat(),可以使用createPrettyPrint()

4.List list = document.selectNodes("/books/book");是通过xpath查找相应内容

关于Xpath语法,可以参考:http://www.cnblogs.com/CheeseZH/archive/2012/11/28/2791983.html

5.setValue(),setText()可以修改结点内容,remove()可以删除结点或者属性

6.OutputFormat format = OutputFormat.createPrettyPrint();指定了格式化方式为缩进式,而非紧凑式;

   format.setEncoding("GB2312");用于指定编码

   之后的XMLWriter生成物理文件时,多了一个OutputFormat对象作为参数



本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/11/28/2791914.html,如需转载请自行联系原作者

相关文章
|
1天前
|
XML JavaScript 数据格式
Beautiful Soup 库的工作原理基于解析器和 DOM(文档对象模型)树的概念
Beautiful Soup 使用解析器(如 html.parser, lxml, html5lib)解析HTML/XML文档,构建DOM树。它提供方法查询和操作DOM,如find(), find_all()查找元素,get_text(), get()提取信息。还能修改DOM,添加、修改或删除元素,并通过prettify()输出格式化字符串。它是处理网页数据的利器,尤其在处理不规则结构时。
6 2
|
1天前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML解析器是浏览器内置工具,用于将XML转换为JavaScript可操作的XML DOM对象,允许遍历、修改节点。大多数现代浏览器支持这一功能。以下JS代码示例展示了如何加载XML文档"books.xml"
|
1天前
|
XML JavaScript Java
详解Java解析XML的四种方法
详解Java解析XML的四种方法
|
11天前
|
前端开发 JavaScript
浏览器通过构建DOM树来解析HTML代码
【4月更文挑战第30天】浏览器通过构建DOM树来解析HTML代码
24 1
|
12天前
|
前端开发 JavaScript 数据安全/隐私保护
前端javascript的DOM对象操作技巧,全场景解析(二)
前端javascript的DOM对象操作技巧,全场景解析(二)
|
12天前
|
移动开发 缓存 JavaScript
前端javascript的DOM对象操作技巧,全场景解析(一)
前端javascript的DOM对象操作技巧,全场景解析(一)
|
13天前
|
XML Web App开发 JavaScript
XML DOM 解析器
大多数浏览器内置XML解析器,用于将XML转换为JavaScript可操作的DOM对象。解析器提供遍历、修改XML节点的功能。以下JS代码示例展示了如何加载XML文档:"books.xml",通过XMLHttpRequest或ActiveXObject发送请求,获取响应并转化为DOM对象。
|
15天前
|
XML 存储 数据格式
探索 DTD 在 XML 中的作用及解析:深入理解文档类型定义
DTD(文档类型定义)用于定义XML文档的结构和合法元素、属性。它允许不同团体就数据交换标准达成一致,并用于验证XML数据的有效性。DTD可通过内部声明(在XML文档内)或外部声明(在单独文件中)来定义。内部声明示例显示了如何定义`note`元素及其子元素的结构,而外部声明则引用外部DTD文件。元素、属性、实体和PCDATA/CDATA是XML构建模块。DTD中,元素通过ELEMENT声明定义,属性通过ATTLIST声明定义,实体声明提供特殊字符或外部资源的快捷方式。
15 0
|
16天前
|
XML IDE Java
Spring_bean注解(xml解析)
Spring_bean注解(xml解析)
9 0
|
19天前
|
XML 数据格式
小米备份descript.xml文件
小米备份descript.xml文件
21 0

推荐镜像

更多