设为首页收藏本站

Scripts 学盟

 找回密码
 加入学盟

QQ登录

只需一步,快速开始

查看: 1551|回复: 0
打印 上一主题 下一主题

使用 dom4j 解析 XML 二 [复制链接]

Rank: 8Rank: 8

跳转到指定楼层
1#
那个谁 发表于 2011-6-21 16:07:49 |只看该作者 |倒序浏览
这一节讨论了创建 XML 文档的过程,下一节将介绍使用 dom4j API 修改这里创建的 XML 文档。
修改文档

这一节说明如何使用 dom4j API 修改示例 XML 文档 catalog.xml。

使用 SAXReader 解析 XML 文档 catalog.xml:
  1. SAXReader saxReader = new SAXReader();
  2. Document document = saxReader.read(inputXml);
复制代码
SAXReader 包含在 org.dom4j.io 包中。

inputXml 是从 c:/catalog/catalog.xml 创建的 java.io.File。使用 XPath 表达式从 article 元素中获得 level 节点列表。如果 level 属性值是“Intermediate”则改为“Introductory”。
  1. List list = document.selectNodes("//article/@level" );
  2.       Iterator iter=list.iterator();
  3.         while(iter.hasNext()){
  4.             Attribute attribute=(Attribute)iter.next();
  5.                if(attribute.getValue().equals("Intermediate"))
  6.                attribute.setValue("Introductory");
  7.        }
复制代码
获取 article 元素列表,从 article 元素中的 title 元素得到一个迭代器,并修改 title 元素的文本。
  1. list = document.selectNodes("//article" );
  2.      iter=list.iterator();
  3.    while(iter.hasNext()){
  4.        Element element=(Element)iter.next();
  5.       Iterator iterator=element.elementIterator("title");
  6.    while(iterator.hasNext()){
  7.    Element titleElement=(Element)iterator.next();
  8.    if(titleElement.getText().equals("Java configuration with XML Schema"))
  9.      titleElement.setText("Create flexible and extensible XML schema");
  10.     }}
复制代码
通过和 title 元素类似的过程修改 author 元素。

清单 4 所示的示例程序 Dom4JParser.java 用于把 catalog.xml 文档修改成 catalog-modified.xml 文档。

清单 4. 用于修改 catalog.xml 的程序(Dom4Jparser.java)
  1. import org.dom4j.Document;
  2. import org.dom4j.Element;
  3. import org.dom4j.Attribute;
  4. import java.util.List;
  5. import java.util.Iterator;
  6. import org.dom4j.io.XMLWriter;
  7. import java.io.*;
  8. import org.dom4j.DocumentException;
  9. import org.dom4j.io.SAXReader;
  10. public class Dom4JParser{
  11. public void modifyDocument(File inputXml){
  12.   try{
  13.    SAXReader saxReader = new SAXReader();
  14.    Document document = saxReader.read(inputXml);
  15.    List list = document.selectNodes("//article/@level" );
  16.    Iterator iter=list.iterator();
  17.    while(iter.hasNext()){
  18.     Attribute attribute=(Attribute)iter.next();
  19.     if(attribute.getValue().equals("Intermediate"))
  20.       attribute.setValue("Introductory");
  21.        }
  22.    
  23.    list = document.selectNodes("//article/@date" );
  24.    iter=list.iterator();
  25.    while(iter.hasNext()){
  26.     Attribute attribute=(Attribute)iter.next();
  27.     if(attribute.getValue().equals("December-2001"))
  28.       attribute.setValue("October-2002");
  29.        }
  30.    list = document.selectNodes("//article" );
  31.    iter=list.iterator();
  32.    while(iter.hasNext()){
  33.     Element element=(Element)iter.next();
  34.     Iterator iterator=element.elementIterator("title");
  35.       while(iterator.hasNext()){
  36.         Element titleElement=(Element)iterator.next();
  37.         if(titleElement.getText().equals("Java configuration with XML
  38.       Schema"))
  39.         titleElement.setText("Create flexible and extensible XML schema");
  40.                                           }
  41.                                 }
  42.     list = document.selectNodes("//article/author" );
  43.     iter=list.iterator();
  44.      while(iter.hasNext()){
  45.      Element element=(Element)iter.next();
  46.      Iterator iterator=element.elementIterator("firstname");
  47.      while(iterator.hasNext()){
  48.       Element firstNameElement=(Element)iterator.next();
  49.       if(firstNameElement.getText().equals("Marcello"))
  50.       firstNameElement.setText("Ayesha");
  51.                                      }
  52.                               }
  53.     list = document.selectNodes("//article/author" );
  54.     iter=list.iterator();
  55.      while(iter.hasNext()){
  56.       Element element=(Element)iter.next();
  57.       Iterator iterator=element.elementIterator("lastname");
  58.      while(iterator.hasNext()){
  59.       Element lastNameElement=(Element)iterator.next();
  60.       if(lastNameElement.getText().equals("Vitaletti"))
  61.       lastNameElement.setText("Malik");
  62.                                   }
  63.                                }
  64.      XMLWriter output = new XMLWriter(
  65.       new FileWriter( new File("c:/catalog/catalog-modified.xml") ));
  66.      output.write( document );
  67.      output.close();
  68.    }

  69.   catch(DocumentException e)
  70.                  {
  71.                   System.out.println(e.getMessage());
  72.                             }
  73.   catch(IOException e){
  74.                        System.out.println(e.getMessage());
  75.                     }
  76. }
  77. public static void main(String[] argv){
  78.   Dom4JParser dom4jParser=new Dom4JParser();
  79.   dom4jParser.modifyDocument(new File("c:/catalog/catalog.xml"));
  80.                                         }
  81.    }
复制代码
这一节说明了如何使用 dom4j 中的解析器修改示例 XML 文档。这个解析器不使用 DTD 或者模式验证 XML 文档。如果 XML 文档需要验证,可以解释用 dom4j 与 JAXP SAX 解析器。

回页首

结束语

包含在 dom4j 中的解析器是一种用于解析 XML 文档的非验证性工具,可以与JAXP、Crimson 或 Xerces 集成。本文说明了如何使用该解析器创建和修改 XML 文档。

参考资料

    您可以参阅本文在 developerWorks 全球站点上的 英文原文.

    请访问 dom4j Web 站点,那里有一个很有用的 FAQ


1

查看全部评分

分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享分享0 收藏收藏0
您需要登录后才可以回帖 登录 | 加入学盟

手机版|Scripts 学盟   |

GMT+8, 2024-5-6 10:20 , Processed in 1.032103 second(s), 12 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部