首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

22.3  使用Java处理XML数据

使用Java处理XML文档数据,不仅可以做到对XML数据的解析,同时也可以实现XML文档的生成,以及在已经存在的XML文档中进行添加元素、删除元素、修改元素等一系列的操作。在这一节中,将向读者介绍使用JDOM来实现对XML数据的处理。

JDOM是一个开源项目,它基于树型结构,利用纯Java技术对XML文档实现解析、生成、序列化等操作。JDOM直接为Java编程服务。它利用Java语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。因此,只需要有一个JDOM的jar包,就可以在Java程序中,使用JDOM来实现对XML数据的处理。

22.3.1  使用JDOM来生成XML文档

下面介绍使用Eclipse来加载JDOM的jar包,同时利用JDOM来创建并生成一个XML文档。步骤如下。

(1)在Eclipse中建立工程项目。单击 “File”|“New”|“Project”命令菜单,如图22-6所示。

图22-6  Eclipse中选择建立工程

(2)在弹出窗口中选择“Java Project”,并单击“Next >”按钮。如图22-7所示。

(3)在弹出的“New Java Project”窗口中,在“Project name”文本框内输入工程名,例如输入“JDOMDemo”,之后单击“Finish”按钮,如图22-8所示。

(4)在JDOM的官方网站http://www.jdom.org/dist/binary/下载JDOM的jar包,如图22-9所示。

       

          图22-7  选择建立Java工程                               图22-8  创建工程

(5)下载完毕后,将其解压缩,解压缩后的“jdom.jar”文件即JDOM的jar包,如图22-10所示。

 

          图22-9  JDOM官方下载页面                      图22-10  jdom.jar文件目录

(6)在已经建立好的Eclipse工程项目中,导入jdom.jar包。鼠标移至工程名“JDOMDemo”上,单击鼠标右键,在弹出菜单中单击“Properties”菜单项,如图22-11所示。

(7)在出现的“Properties for JDOMDemo”窗口中,选择“Java Build Path”选项,再在右边选择“Libraries”标签,并在其窗口中单击“Add External JARs…”按钮(添加Eclipse外部jar包),如图22-12所示。

图22-11  选择工程属性编辑选项

图22-12  工程属性编辑窗口

(8)在出现的JAR Selection窗口中,选择之前下载好的“jdom.jar”文件,并单击“打开”按钮,如图22-13所示。

(9)完成以上的几步后,会在“Libraries”标签窗口中发现多出了jdom一项,就说明导入成功了,并点击“OK”按钮,如图22-14所示。

图22-13  导入“jdom.jar”文件窗口

图22-14  成功导入“jdom.jar”文件窗口

(10)在工程项目中添加生成XML文档的类CreateXML,如图22-15所示。

(11)在代码编辑窗口中编写代码,用于生成XML文档,如代码22-7所示。

代码22-7  使用JDOM生成XML文档CreateXML.java

import java.io.*;

import java.util.*;

import org.jdom.*;

import org.jdom.input.*;

import org.jdom.output.*;

public class CreateXML

{

      /**

图22-15  创建CreateXML类

       * @param args

       */

      //声明XML中所有的元素

      Element customer,name,age,sex,address,street,city,district;

     

      public CreateXML()

      {

            //创建customer元素,并设置为XML文档的根节点

            customer = new Element("customer");

            Document myDocument = new Document(customer);

           

            //创建XML文档中的其他元素,并初始化元素名

            name = new Element("name");

            age = new Element("age");

            sex = new Element("sex");

            address = new Element("address");

            street = new Element("street");

            city = new Element("city");

            district = new Element("district");

           

            //给XML文档中的每一个元素添加内容值

            name.addContent("Wang Xiao Yue");

            age.addContent("24");

            sex.addContent("male");

            street.addContent("No.1 East Rood,ShangDi");

            district.addContent("Hai Dian");

            city.addContent("Bei Jing");

           

            //将street、district和city元素作为子元素,添加到address元素中

            address.addContent(street);

            address.addContent(district);

            address.addContent(city);

           

            //将address元素作为子元素,添加到customer根元素中

            customer.addContent(name);

            customer.addContent(age);

            customer.addContent(sex);

            customer.addContent(address);

           

            try

            {

                  //创建XML文件输出流

                  XMLOutputter fmt = new XMLOutputter();

                 

                  //创建文件输出流

                  FileWriter writer = new FileWriter("c:\\customer.xml");

                 

                  //设置所创建的XML文档的格式

                  Format f = Format.getPrettyFormat();

                  fmt.setFormat(f);

                 

                  //将生成的XML文档写入到"c:\customer.xml"文件中

                  fmt.output(myDocument, writer);

                  writer.close();

            }

            catch (Exception e) {e.printStackTrace();}

      }

      public static void main(String[] args)

      {

            // TODO Auto-generated method stub

            CreateXML createXML = new CreateXML();

      }

}

程序运行后,会在“C:\”目录下生成 “customer.xml”文件,如图22-16所示。

新创建的“customer.xml”文件的内容如图22-17所示。

  

         图22-16  生成的“customer.xml”文件            图22-17  生成的“customer.xml”文件内容

22.3.2  使用JDOM来处理XML文档

本节介绍使用JDOM来处理之前建立的XML文档“customer.xml”,包括添加、删除以及修改XML文档中的元素。步骤如下。

(1)在之前建立的工程项目JDOMDemo中,添加处理XML文档的类ModifyXML,如图22-18所示。

图22-18  创建ModifyXML类

(2)在代码编辑窗口中编写代码,用于处理XML文档,见代码22-8所示。

代码22-8  使用JDOM处理XML文档ModifyXML.java

import org.jdom.*;

import org.jdom.output.*;

import org.jdom.xpath.*;

import java.io.*;

import java.util.Iterator;

import java.util.List;

import org.jdom.*;

import org.jdom.input.*;

import org.jdom.output.*;

public class ModifyXML

{

      /**

       * @param args

       */

      File file;                                           //声明File对象file

      Document doc;                   //声明Document对象doc

      SAXBuilder builder;                                //声明用来解析XML文档的SAXBuilder类对象builder

     

      public ModifyXML()

      {

            try

            {

                  //创建文件对象指向"c:\customer.xml"文件

                  file = new File("c:\\customer.xml");

                 

                  //创建builder对象,并使用该对象中的build方法处理XML文件

                  builder = new SAXBuilder();

                  doc = builder.build(file);

            }

            catch(IOException e){}

            catch(Exception e){}

           

            //获得XML文档的根节点元素

            Element root=doc.getRootElement();

           

            //获得XML文档根节点元素下的全部子节点元素

            List list = root.getChildren();

           

            //利用循环来处理全部子节点元素

            for (Iterator iter = list.iterator(); iter.hasNext();)

            {

                    //获得其中一个字节点元素

                    Element element = (Element)iter.next();

                 

                    //获得该子节点元素名

                    String nodeName = element.getName();

                 

                    //当所获得的子元素名为"address"时的处理

                    if(nodeName.equals("address"))

                    {

                          //添加子元素"country",并设置其内容为"China"

                          Element country = new Element("country");

                          country.addContent("China");

                          element.addContent(country);

                       

                          //修改名为"street"的子元素内容

                          Element street = element.getChild("street");

                          street.setText("BUPT,10# XiTuCheng road");

                        

                          //修改名为"district"的子元素

                          element.removeChild("district");

                    }

            }

            try

            {

                    //创建XML文件输出流

                    XMLOutputter fmt = new XMLOutputter();

                 

                    //创建文件输出流

                    FileWriter writer = new FileWriter("c:\\customer.xml");

                 

                    //设置所创建的XML文档的格式

                    Format f = Format.getPrettyFormat();

                    fmt.setFormat(f);

                 

                    //将生成的XML文档写入到"c:\customer.xml"文件中

                    fmt.output(doc, writer);

                    writer.close();

            }

            catch (Exception e) {e.printStackTrace();}

      }

     

      public static void main(String[] args)

      {

            // TODO Auto-generated method stub

            ModifyXML modifyXML = new ModifyXML();

      }

}

程序运行后,“customer.xml”文件的内容如图22-19所示。

图22-19  处理后的“customer.xml”文件内容

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论