简析JAVA中的XML编程

    技术2022-05-11  89

    笔者通过介绍关于“学生花名册”的XML文件实例来介绍JAVA中的XML读写操作。文件结构如下所示,把此文件命名为Input. xml,如果您还对XML结构感到比较陌生,建议先看看上一文中关于XML文件的说明。       xml version="1.0" encoding="GB2312"?>      <学生花名册>      <学生 性别 = "男">      <姓名>李华      <年龄>14      <电话>6287555            <学生 性别 = "男">      <姓名>张三      <年龄>16      <电话>8273425                     首先建一个简单的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,XML解释器用Apache的Crimson,可以到Apache主页去上载。      import java.io.*; //Java基础包,包含各种流操作      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(); 

    最新回复(0)