博学而笃志,好问而近思

关于Java中的XML读写应用

XML 应用中,最常用也最实用的莫过于 XML 文件的读写,这里通过一个简单的 XML 文件读写来作简要分析。可以在任何文本编辑器中先建立如下结构的 XML 文件,类似于 HTML 结构,但 XML 语义比较严格,起始标记必须配对,比如 " 〈学生花名册〉 " " 〈/学生花名册〉 " 对应,空格多少可不必在意,但一般都以缩格形式书写,便于阅读。把此文件命名为 Input.xml ,可以在任何支持 XML 的浏览器中打开测试一下,如果输入正确,在浏览中可以看到此文件的树形表示结构。

?xml   version="1.0"   encoding="GB2312"? > 
<学生花名册> 
 <学生 性别  =   " " > 
  <姓名>李华< / 姓名>  
  <年龄> 14 / 年龄> 
  <电话> 6287555 / 电话> 
 < / 学生> 
 <学生 性别  =   " " > 
  <姓名>张三< / 姓名> 
  <年龄> 16 / 年龄> 
  <电话> 8273425 / 电话> 
 < / 学生> 
/ 学生花名册>
 
  准备工作做完后,接着就开始写实质性的 JAVA 代码了。为保存从 XML 文件读入的信息,需要先建一个简单的 Bean 来保存学生信息,命名为 StudentBean ,代码如下所示: 

public
  class   StudentBean   {  
  private   String   sex;   // 学生性别 
  private   String   name;   // 学生姓名 
  private   int   age;   // 学生年龄 
  private   String   phone;   // 电话号码 

  public   void   setSex(String   s)   {  
   sex   =   s;  
  }  
  public   void   setName(String   s)   {  
   name   =   s;  
  }  
  public   void   setAge(int   a)   {  
   age   =   a;  
  }  
  public   void   setPhone(String   s)   {  
   phone   =   s;  
  }  
  public   String   getSex()   {  
   return   sex;  
  }  
  public   String   getName()   {  
   return   name;  
  }  
  public   int   getAge()   {  
   return   age;  
  }   
  public   String   getPhone()   {  
   return   phone;  
  }  
}
 

  之后写 XML 的测试类,笔者把这个类命名为 XMLTest ,为了读写 XML 文件,需要导入如下 JAVA 包, "//" 后为注释说明,笔者的环境是 JDK   1.3.1 _04 ,在 JDK   1.4.0 中测试也通过, XML 解释器用 Apache Crimson ,可以到 Apache 主页去上载。 

import
  java.io.*;   //Java 基础包,包含各种 IO 操作 
import
  java.util.*;   //Java 基础包,包含各种标准数据结构操作 
import
  javax.xml.parsers.*;   //XML 解析器接口 
import
  org.w3c.dom.*;   //XML DOM 实现 
import
  org.apache.crimson.tree.XmlDocument;// XML 文件要用到 

  为了保存多个学生信息,还得借助一个集合类 ( 并不是单纯意义上的集合, JAVA 中的集合是集合框架的概念,包含向量、列表、哈希表等),这里采用 Vector 向量类。定义在 XMLTest 测试类中,命名为 student_Vector 。然后定义两个方法 readXMLFile writeXMLFile ,实现读写操作。代码如下: 

private
  void   readXMLFile(String   inFile)   throws   Exception   {  
  // 为解析 XML 作准备,创建 DocumentBuilderFactory 实例 , 指定 DocumentBuilder  
  DocumentBuilderFactory   dbf   =   DocumentBuilderFactory.newInstance();  
  DocumentBuilder   db   =   null;  
  try   {  
   db   =   dbf.newDocumentBuilder();  
  }catch   (ParserConfigurationException   pce)   {  
   System.err.println(pce);   // 出异常时输出异常信息,然后退出,下同 
   System.exit(1);  
  }  

  Document   doc   =   null;  
  try   {  
   doc   =   db.parse(inFile);  
  }   catch   (DOMException   dom)   {  
   System.err.println(dom.getMessage());  
   System.exit(1);  
  }   catch   (IOException   ioe)   {  
   System.err.println(ioe);  
   System.exit(1);  
  }  
  // 下面是解析 XML 的全过程,比较简单,先取根元素 " 学生花名册 "  
  Element   root   =   doc.getDocumentElement();  
  // " 学生 " 元素列表 
  NodeList   students   =   root.getElementsByTagName(" 学生 ");  
  for   (int   i   =   0;   i  <  students.getLength();   i++)   {  
   // 依次取每个 " 学生 " 元素 
   Element   student   =   (Element)   students.item(i);  
   // 创建一个学生的 Bean 实例 
   StudentBean   studentBean   =   new   StudentBean();  
   // 取学生的性别属性 
   studentBean.setSex(student.getAttribute(" 性别 "));  
   // " 姓名 " 元素,下面类同 
   NodeList   names   =   student.getElementsByTagName(" 姓名 ");  
   if   (names.getLength()   ==   1)   {  
    Element   e   =   (Element)   names.item(0);  
    Text   t   =   (Text)   e.getFirstChild();  
    studentBean.setName(t.getNodeValue());  
   }  

   NodeList   ages   =   student.getElementsByTagName(" 年龄 ");  
   if   (ages.getLength()   ==   1)   {  
    Element   e   =   (Element)   ages.item(0);  
    Text   t   =   (Text)   e.getFirstChild();  
    studentBean.setAge(Integer.parseInt(t.getNodeValue()));  
   }  

   NodeList   phones   =   student.getElementsByTagName(" 电话 ");  
   if   (phones.getLength()   ==   1)   {  
    Element   e   =   (Element)   phones.item(0);  
    Text   t   =   (Text)   e.getFirstChild();  
    studentBean.setPhone(t.getNodeValue());  
   }  

   student_Vector.add(studentBean);  
  }  
}
 

private
  void   writeXMLFile(String   outFile)   throws   Exception   {  
  // 为解析 XML 作准备,创建 DocumentBuilderFactory 实例 , 指定 DocumentBuilder  
  DocumentBuilderFactory   dbf   =   DocumentBuilderFactory.newInstance();  
  DocumentBuilder   db   =   null;  
  try   {  
   db   =   dbf.newDocumentBuilder();  
  }   catch   (ParserConfigurationException   pce)   {  
   System.err.println(pce);  
   System.exit(1);  
  }  

  Document   doc   =   null;  
  doc   =   db.newDocument();  

  // 下面是建立 XML 文档内容的过程,先建立根元素 " 学生花名册 "  
  Element   root   =   doc.createElement(" 学生花名册 ");  
  // 根元素添加上文档 
  doc.appendChild(root);  

  // 取学生信息的 Bean 列表 
  for   (int   i   =   0;   i  <  student_Vector.size();   i++)   {  
   // 依次取每个学生的信息 
   StudentBean   studentBean   =   (StudentBean)   student_Vector.get(i);  
   // 建立 " 学生 " 元素,添加到根元素 
   Element   student   =   doc.createElement(" 学生 ");  
   student.setAttribute(" 性别 ",   studentBean.getSex());  
   root.appendChild(student);  
   // 建立 " 姓名 " 元素,添加到学生下面,下同 
   Element   name   =   doc.createElement(" 姓名 ");  
   student.appendChild(name);  
   Text   tName   =   doc.createTextNode(studentBean.getName());  
   name.appendChild(tName);  

   Element   age   =   doc.createElement(" 年龄 ");  
   student.appendChild(age);  
   Text   tAge   =   doc.createTextNode(String.valueOf(studentBean.getAge()));  
   age.appendChild(tAge);  

   Element   phone   =   doc.createElement(" 电话 ");  
   student.appendChild(phone);  
   Text   tPhone   =   doc.createTextNode(studentBean.getPhone());  
    phone.appendChild(tPhone);  
  }  
  // XML 文档输出到指定的文件 
  FileOutputStream   outStream   =   new   FileOutputStream(outFile);  
  OutputStreamWriter   outWriter   =   new   OutputStreamWriter(outStream);  
  ((XmlDocument)   doc).write(outWriter,   "GB2312");  
  outWriter.close();  
  outStream.close();   
}
 

  最后加入测试主函数,如下: 

public
  static   void   main(String[]   args)   throws   Exception   {  
  // 建立测试实例  
  XMLTest   xmlTest   =   new   XMLTest();  
  // 初始化向量列表 
  xmlTest.student_Vector   =   new   Vector();  
 
  System.out.println(" 开始读 Input.xml 文件 ");  
  xmlTest.readXMLFile("Input.xml");  
 
  System.out.println(" 读入完毕 , 开始写 Output.xml 文件 ");  
  xmlTest.writeXMLFile("Output.xml");  
  System.out.println(" 写入完成 ");  
}
 

  好了,保存好 StudentBean XMLTest ,把 Input.xml 保存到工作目录下。如果您输入很仔细,没敲错字母的话,可以看到 " 写入完成 " 了,去瞧瞧 Output.xml 文件和 Input.xml 文件是不是一样吧。

posted on 2006-06-21 14:05 冰川 阅读(1916) 评论(1)  编辑  收藏

评论

# re: 关于Java中的XML读写应用 2009-10-23 17:04

很实用,谢谢  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 
<2006年6月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

导航

统计

常用链接

留言簿(14)

随笔档案

BlogJava的帮助

朋友的博客

搜索

最新评论

阅读排行榜

评论排行榜

快乐工作—享受生活