`
kingmxj
  • 浏览: 182560 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

xml解析器Dom4J代码示例

    博客分类:
  • Java
 
阅读更多
1. 示例XML文档(holen.xml)
<?xml version="1.0" encoding="UTF-8"?>
<books>
    <!--This is a test for dom4j, holen, 2004.9.11-->
    <book show="yes">
       <title>Dom4j Tutorials</title>
    </book>
    <book show="yes">
       <title>Lucene Studing</title>
    </book>
    <book show="no">
       <title>Lucene in Action</title>
    </book>
    <owner>O'Reilly</owner>
</books> 


2. 建立一个XML文档
    /**
     * 建立一个XML文档,文档名由输入属性决定
     * @param filename 需建立的文件名
     * @return 返回操作结果, 0表失败, 1表成功
     */
    public int createXMLFile(String filename){
       /** 返回操作结果, 0表失败, 1表成功 */
       int returnValue = 0;
       /** 建立document对象 */
       Document document = DocumentHelper.createDocument();
       /** 建立XML文档的根books */
       Element booksElement = document.addElement("books");
       /** 加入一行注释 */
       booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");
       /** 加入第一个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("O'Reilly");
       
       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;
    } 
 


说明:
Document document = DocumentHelper.createDocument();
通过这句定义一个XML文档对象。

Element booksElement = document.addElement("books");
通过这句定义一个XML元素,这里添加的是根节点。
Element有几个重要的方法:
l         addComment:添加注释
l         addAttribute:添加属性
l         addElement:添加子元素

最后通过XMLWriter生成物理文件,默认生成的XML文件排版格式比较乱,可以通过OutputFormat类的createCompactFormat()方法或createPrettyPrint()方法格式化输出,默认采用createCompactFormat()方法,显示比较紧凑,这点将在后面详细谈到。


3. 修改XML文档
    /**
     * 修改XML文件中内容,并另存为一个新文件
     * 重点掌握dom4j中如何添加节点,修改节点,删除节点
     * @param filename 修改对象文件
     * @param newfilename 修改后另存为该文件
     * @return 返回操作结果, 0表失败, 1表成功
     */
    public int ModiXMLFile(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项内容改为Tshinghua
            * 并在owner节点中加入date节点,date节点的内容为2004-09-11,还为date节点添加一个属性type
            */
           list = document.selectNodes("/books/owner" );
           iter = list.iterator();
           if(iter.hasNext()){
              Element ownerElement = (Element)iter.next();
              ownerElement.setText("Tshinghua");
              Element dateElement = ownerElement.addElement("date");
              dateElement.setText("2004-09-11");
              dateElement.addAttribute("type","Gregorian 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;
    }
    

说明:
List list = document.selectNodes("/books/book/@show" );
list = document.selectNodes("/books/book");
上述代码通过xpath查找到相应内容。

通过setValue()、setText()修改节点内容。

通过remove()删除节点或属性。

4. 格式化输出和指定编码

默认的输出方式为紧凑方式,默认编码为UTF-8,但对于我们的应用而言,一般都要用到中文,并且希望显示时按自动缩进的方式的显示,这就需用到OutputFormat类。
 
    /**
     * 格式化XML文档,并解决中文问题
     * @param filename
     * @return
     */
    public 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("GBK");
           writer= new XMLWriter(new FileWriter(new File(filename)),format);
           writer.write(document);
           writer.close();      
           /** 执行成功,需返回1 */
           returnValue = 1;     
       }catch(Exception ex){
           ex.printStackTrace();
       }
       return returnValue;
    } 
  

说明:

OutputFormat format = OutputFormat.createPrettyPrint();
这句指定了格式化的方式为缩进式,则非紧凑式。

format.setEncoding("GBK");
指定编码为GBK。

XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)),format);
这与前面两个方法相比,多加了一个OutputFormat对象,用于指定显示和编码方式。


 
分享到:
评论

相关推荐

    dom4j.jar包,java解析xml dom4j.jar包

    - **SAX和DOM兼容**:DOM4J可以与SAX和DOM API无缝集成,使开发者在不同解析器间切换更加方便。 - **便捷的文档操作**:提供了一整套方法用于添加、删除、修改XML文档的元素和属性。 **2. 使用DOM4J解析XML** ...

    DOM4J xml解析工具

    在实际开发中,通过`dom4j-1.6.1`这个版本,我们可以获得DOM4J的API文档、示例代码和库文件,从而快速上手并应用到项目中。例如,要解析一个XML文件,可以使用`DocumentFactory`创建`Document`对象,然后通过`...

    dom4j解析xml

    以下是一个简单的DOM4J代码示例,展示如何使用DOM4J删除XML文档中的一个节点: ```java import java.io.FileOutputStream; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j....

    xml 三种解析方式dom,sax,dom4j

    在提供的压缩包中,包含了关于这三种解析方式的代码示例,你可以参考这些代码了解如何在Java环境中使用DOM、SAX和DOM4J进行XML解析。通过阅读和理解这些示例,你可以更好地掌握XML解析技术,并根据项目需求选择合适...

    DOM4J 解析XML

    6. **DocumentBuilderFactory和DocumentBuilder**:这两个类用于创建和配置DOM4J解析器。 7. **Reader和Writer**:DOM4J提供了各种Reader和Writer接口,用于读取和写入XML数据,如StringReader、StringWriter、...

    java dom4j解析xml

    - 对于大型XML文件,使用SAX解析器可以降低内存消耗,而DOM4J的事件驱动模式使得处理大型文件成为可能。 - 适当使用缓存和池化技术可以提高DOM4J的性能。 - 对于频繁的读取操作,可以考虑使用XPath来减少遍历操作...

    JDK自带xml解析器dom+sax

    JDK(Java Development Kit)提供了两种内置的XML解析器:DOM(Document Object Model)和SAX(Simple API for XML),它们各有特点,适用于不同的场景。 1. DOM解析XML: DOM解析器将整个XML文档加载到内存中,...

    dom4j基于事件流解析大XML的文件 示例

    而DOM4J提供了一种基于事件流的解析方式,即SAX解析器,可以有效地解决这个问题。 **DOM4J解析XML的优势:** 1. **灵活性**:DOM4J提供了丰富的接口和方法,支持XPath查询,可以方便地进行XML结构的操作。 2. **...

    使用dom4j 和本地dom 解析xml 文件

    在压缩包文件"复件 dom"中,可能包含了示例代码或教程,用于演示如何使用DOM4J和本地DOM解析XML文件。通过查看这些文件,你可以更深入地了解两种方法的具体实现,并在实际项目中选择合适的方式处理XML数据。 总结来...

    dom4j-jar与dom4j解析xml文档介绍

    2. **XML解析方式**:dom4j提供了两种主要的XML解析方式:SAX(Simple API for XML)和DOM(Document Object Model)。SAX是流式解析,适用于处理大型XML文件;DOM则是将整个XML文档加载到内存,适合小型或中型文档...

    XML 文件解析 DOM DOM4j JDOM SAX 和相对路径的写法 ,代码是有注释的

    本教程将详细介绍四种主要的XML解析方式:DOM、DOM4j、JDOM和SAX,以及如何在Java中处理XML文件的相对路径。 1. DOM(Document Object Model) DOM是W3C推荐的一种解析XML的标准,它将XML文档转化为一个树形结构,...

    dom4j 解析xml实例

    DOM4J作为一个解析器,可以将XML文档转换为一个可操作的Java对象模型,方便我们进行数据的读取和写入。 在`Dom4jTest1.java`中,程序通常会包含以下步骤: 1. 引入DOM4J库:首先,我们需要在Java源代码中引入DOM4J...

    Java使用sax、dom、dom4j解析xml文档

    以下是一个DOM4J解析XML的简单示例: ```java import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; public class Dom4jExample { public static void main(String[] args) {...

    dom4j练习示例(备忘用)

    这个"dom4j练习示例(备忘用)"压缩包很可能是包含了一些代码示例,帮助学习者理解和掌握DOM4J的核心功能。 在DOM4J中,XML文档被表示为一个树形结构,根节点是Document对象,而其他元素、属性、文本等都是其子节点。...

    dom4J解析XML 和jar包

    1. **解析XML文档**:DOM4J提供了多种解析器,如SAX和DOM解析器,可以高效地将XML文档转换为树形结构。通过这种方式,开发者可以方便地遍历和访问XML元素。 2. **构建XML文档**:DOM4J允许动态创建XML文档,可以...

    解析xml文件dom4j

    在Eclipse这样的集成开发环境中,你可以将这些JAR文件添加到项目的类路径中,以便在代码中直接引用DOM4J和MySQL连接器的类和方法。例如,使用DOM4J解析XML文件时,你可以创建`Document`对象,然后通过`...

    用dom4j解析xml文件

    本篇文章将深入探讨如何使用DOM4J来解析XML文件,以及通过示例代码来展示其基本操作。 首先,我们需要理解DOM4J的工作原理。DOM4J采用的是DOM(Document Object Model)模型,它将整个XML文档加载到内存中形成一棵...

    dom4j xml解析

    DOM4J是一个开源项目,它不仅实现了W3C的DOM API,还提供了一种基于事件的SAX解析器和XPath查询的支持。相比于标准的DOM,DOM4J在内存占用和性能上有所优化,更适合处理大型XML文档。其灵活性在于,你可以根据需要...

    dom4j_XML.rar_DOM4J_dom4j xml java_java xml_读写xml

    1. **XML解析**:DOM4J支持两种解析XML文档的方式:SAX(Simple API for XML)和DOM(Document Object Model)。SAX是事件驱动的,逐行解析XML,占用内存小,适合处理大型文件;DOM则是将整个XML文档加载到内存中...

Global site tag (gtag.js) - Google Analytics