XML—DOM解析案例

互联网 17-2-24

【题目】:基于XML文件实现一个简易的控制台程序,可以查看学生成绩,添加学生,删除学生等。

xml文件保存在src/com/dom/exercise文件夹下,它的格式如下:

<?xml version="1.0" encoding="utf-8" standalone="no"?><students>      <student sid="001">          <name>小明</name>          <course>              <java>90</java>              <oracle>90</oracle>              <vb>93</vb>          </course>      </student>      <student sid="002">          <name>小李</name>          <course>              <java>78</java>              <oracle>86</oracle>              <vb>98</vb>          </course>      </student>      <student sid="003">          <name>小王</name>          <course>              <java>89</java>              <oracle>83</oracle>              <vb>95</vb>          </course>      </student></students>

这个可以说是最简单的程序了,稍微复杂的一点是它要基于XML文件来实现,所以这里肯定要使用DOM解析,SAX不能用是因为SAX解析只能读取XML文件而不能更新。

1.首先编写StudentBean,如下:

package com.dom.exercise;public class Student {      private String id = null;          private String name = null;          private int score_java;          private int score_oracle;          private int score_vb;          public Student() {      }    public Student(String id, String name, int score_java, int score_oracle,                  int score_vb) {              super();              this.id = id;              this.name = name;              this.score_java = score_java;              this.score_oracle = score_oracle;              this.score_vb = score_vb;      }    public String getId() {              return id;      }    public void setId(String id) {              this.id = id;      }    public String getName() {              return name;      }    public void setName(String name) {              this.name = name;      }    public int getScore_java() {              return score_java;      }    public void setScore_java(int score_java) {              this.score_java = score_java;      }    public int getScore_oracle() {              return score_oracle;      }    public void setScore_oracle(int score_oracle) {              this.score_oracle = score_oracle;      }    public int getScore_vb() {              return score_vb;      }    public void setScore_vb(int score_vb) {              this.score_vb = score_vb;      }  }

2.编写最关键的StudentService类,它对XML文档进行各种操作

import java.util.ArrayList;  import javax.xml.parsers.DocumentBuilder;  import javax.xml.parsers.DocumentBuilderFactory;  import javax.xml.transform.Transformer;  import javax.xml.transform.TransformerFactory;  import javax.xml.transform.dom.DOMSource;  import javax.xml.transform.stream.StreamResult;  import org.w3c.dom.Document;  import org.w3c.dom.Element;  import org.w3c.dom.Node;  import org.w3c.dom.NodeList;  public class StudentService {        private static Document document = null;          private static String path = "src/com/dom/exercise/student.xml";          static{              try{              DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();              DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();              document = documentBuilder.parse(path);          }catch(Exception e){              System.out.println("初始化失败...");              e.printStackTrace();          }      }    /**       * 获取所有学生信息       * @return       */      public static ArrayList<Student> readAll(){          ArrayList<Student> array = new ArrayList<Student>();          NodeList students  = document.getElementsByTagName("student");                  for (int i = 0; i < students.getLength(); i++) {              Element node_student = (Element)students.item(i);              String id = node_student.getAttribute("sid");              Node node_name = node_student.getElementsByTagName("name").item(0);              String name = node_name.getTextContent();              Element node_course = (Element)node_student.getElementsByTagName("course").item(0);              Node course_java = node_course.getElementsByTagName("java").item(0);              Node course_oracle = node_course.getElementsByTagName("oracle").item(0);              Node course_vb = node_course.getElementsByTagName("vb").item(0);                          int score_java = Integer.parseInt(course_java.getTextContent());                          int score_oracle = Integer.parseInt(course_oracle.getTextContent());                          int score_vb = Integer.parseInt(course_vb.getTextContent());                Student student = new Student(id, name, score_java, score_oracle, score_vb);              array.add(student);          }        return array;      }    /**       * 根据ID获取一个学生的信息       * @param sid       * @return       */      public static Student getStudentById(String sid){          NodeList students  = document.getElementsByTagName("student");                  for (int i = 0; i < students.getLength(); i++) {              Element node_student = (Element)students.item(i);              String id = node_student.getAttribute("sid");                          if(!id.equals(sid)){                              continue;              }              Node node_name = node_student.getElementsByTagName("name").item(0);              String name = node_name.getTextContent();              Element node_course = (Element)node_student.getElementsByTagName("course").item(0);              Node course_java = node_course.getElementsByTagName("java").item(0);              Node course_oracle = node_course.getElementsByTagName("oracle").item(0);              Node course_vb = node_course.getElementsByTagName("vb").item(0);                          int score_java = Integer.parseInt(course_java.getTextContent());                          int score_oracle = Integer.parseInt(course_oracle.getTextContent());                          int score_vb = Integer.parseInt(course_vb.getTextContent());                Student student = new Student(id, name, score_java, score_oracle, score_vb);                          return student;          }        return null;      }    /**       * 添加学生       * @param student       */      public static void addStudent(Student student){          Element stu = document.createElement("student");          stu.setAttribute("sid", student.getId());          Element name = document.createElement("name");          name.setTextContent(student.getName());          Element course = document.createElement("course");          Element score_java = document.createElement("java");          Element score_oracle = document.createElement("oracle");          Element score_vb = document.createElement("vb");          score_java.setTextContent(String.valueOf(student.getScore_java()));          score_oracle.setTextContent(String.valueOf(student.getScore_oracle()));          score_vb.setTextContent(String.valueOf(student.getScore_vb()));            course.appendChild(score_java);          course.appendChild(score_oracle);          course.appendChild(score_vb);          stu.appendChild(name);          stu.appendChild(course);          document.getDocumentElement().appendChild(stu);          update(document, path);      }    /**       * 根据ID删除一个学生       * @param sid       */      public static void deleteStudentById(String sid){          NodeList students = document.getElementsByTagName("student");                  for (int i = 0; i < students.getLength(); i++) {              Element student = (Element)students.item(i);                          if(student.getAttribute("sid").equals(sid)){                  student.getParentNode().removeChild(student);              }          }          update(document,path);      }    /**       * 更新到文件       * @param document       * @param path       */      public static void update(Document document,String path){        try{              TransformerFactory transformerFactory = TransformerFactory.newInstance();              Transformer transformer = transformerFactory.newTransformer();              transformer.transform(new DOMSource(document), new StreamResult(new File(path)));          }catch(Exception e){              e.printStackTrace();          }        }  }

3.编写主测试程序 实现简易界面:

package com.dom.exercise;  import java.util.ArrayList;  import java.util.Scanner;  public class Main {      public static void main(String[] args) {            Scanner scanner = new Scanner(System.in);                  boolean flag = true;                  while(flag){                      // 显示操作界面              System.console();              System.out.println("*********************操作界面*********************");              System.out.println("\t\t1.查询所有学生的成绩");              System.out.println("\t\t2.按照ID查询学生成绩 ");              System.out.println("\t\t3.添加一个学生");              System.out.println("\t\t4.按照ID删除一个学生");              System.out.println("\t\t0.退出系统");              System.out.println("************************************************");                          // 获取用户的操作              String operate = scanner.next();                          if ("1".equals(operate)) {                  ArrayList<Student> students = StudentService.readAll();                  System.out.println("所有的学生信息如下:");                  System.out.println("Name\tID\tJava\tOracle\tVB");                                  for (Student student : students) {                      System.out.println(student.getName() + "\t" + student.getId()                              + "\t" + student.getScore_java() + "\t"                              + student.getScore_oracle() + "\t"                              + student.getScore_vb());                  }              }else if("2".equals(operate)){                  System.out.println("请输入要查询的学生ID:");                  String sid = scanner.next();                  Student student = StudentService.getStudentById(sid);                  System.out.println("学号为"+sid+"的学生的信息如下:");                  System.out.println("Name\tID\tJava\tOracle\tVB");                  System.out.println(student.getName() + "\t" + student.getId()                          + "\t" + student.getScore_java() + "\t"                          + student.getScore_oracle() + "\t"                          + student.getScore_vb());              }else if("3".equals(operate)){                  System.out.println("请输入要添加的学生ID:");                  String sid = scanner.next();                  System.out.println("请输入要添加的学生姓名:");                  String name = scanner.next();                  System.out.println("请输入要添加的学生Java成绩:");                                  int score_java = Integer.parseInt(scanner.next());                  System.out.println("请输入要添加的学生Oracle成绩:");                                  int score_oracle = Integer.parseInt(scanner.next());                  System.out.println("请输入要添加的学生VB成绩:");                                  int score_vb = Integer.parseInt(scanner.next());                  Student student = new Student(sid, name, score_java, score_oracle, score_vb);                  StudentService.addStudent(student);                  System.out.println("添加成功!");              }else if("4".equals(operate)){                  System.out.println("请输入要删除的学生的ID:");                  String sid = scanner.next();                  StudentService.deleteStudentById(sid);                  System.out.println("删除成功!");              }              System.out.println("是否继续?(Y/N)");              flag = scanner.next().trim().toLowerCase().equals("y")?true:false;          }          scanner.close();      }  }

4.运行结果

问题的关键仍是DOM解析XML,对XML进行crud操作。

【题目】:基于XML文件实现一个简易的控制台程序,可以查看学生成绩,添加学生,删除学生等。

xml文件保存在src/com/dom/exercise文件夹下,它的格式如下:

<?xml version="1.0" encoding="utf-8" standalone="no"?><students>      <student sid="001">          <name>小明</name>          <course>              <java>90</java>              <oracle>90</oracle>              <vb>93</vb>          </course>      </student>      <student sid="002">          <name>小李</name>          <course>              <java>78</java>              <oracle>86</oracle>              <vb>98</vb>          </course>      </student>      <student sid="003">          <name>小王</name>          <course>              <java>89</java>              <oracle>83</oracle>              <vb>95</vb>          </course>      </student></students>

这个可以说是最简单的程序了,稍微复杂的一点是它要基于XML文件来实现,所以这里肯定要使用DOM解析,SAX不能用是因为SAX解析只能读取XML文件而不能更新。

1.首先编写StudentBean,如下:

package com.dom.exercise;public class Student {      private String id = null;          private String name = null;          private int score_java;          private int score_oracle;          private int score_vb;          public Student() {      }    public Student(String id, String name, int score_java, int score_oracle,                  int score_vb) {              super();              this.id = id;              this.name = name;              this.score_java = score_java;              this.score_oracle = score_oracle;              this.score_vb = score_vb;      }    public String getId() {              return id;      }    public void setId(String id) {              this.id = id;      }    public String getName() {              return name;      }    public void setName(String name) {              this.name = name;      }    public int getScore_java() {              return score_java;      }    public void setScore_java(int score_java) {              this.score_java = score_java;      }    public int getScore_oracle() {              return score_oracle;      }    public void setScore_oracle(int score_oracle) {              this.score_oracle = score_oracle;      }    public int getScore_vb() {              return score_vb;      }    public void setScore_vb(int score_vb) {              this.score_vb = score_vb;      }  }

2.编写最关键的StudentService类,它对XML文档进行各种操作

import java.util.ArrayList;  import javax.xml.parsers.DocumentBuilder;  import javax.xml.parsers.DocumentBuilderFactory;  import javax.xml.transform.Transformer;  import javax.xml.transform.TransformerFactory;  import javax.xml.transform.dom.DOMSource;  import javax.xml.transform.stream.StreamResult;  import org.w3c.dom.Document;  import org.w3c.dom.Element;  import org.w3c.dom.Node;  import org.w3c.dom.NodeList;  public class StudentService {        private static Document document = null;          private static String path = "src/com/dom/exercise/student.xml";          static{              try{              DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();              DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();              document = documentBuilder.parse(path);          }catch(Exception e){              System.out.println("初始化失败...");              e.printStackTrace();          }      }    /**       * 获取所有学生信息       * @return       */      public static ArrayList<Student> readAll(){          ArrayList<Student> array = new ArrayList<Student>();          NodeList students  = document.getElementsByTagName("student");                  for (int i = 0; i < students.getLength(); i++) {              Element node_student = (Element)students.item(i);              String id = node_student.getAttribute("sid");              Node node_name = node_student.getElementsByTagName("name").item(0);              String name = node_name.getTextContent();              Element node_course = (Element)node_student.getElementsByTagName("course").item(0);              Node course_java = node_course.getElementsByTagName("java").item(0);              Node course_oracle = node_course.getElementsByTagName("oracle").item(0);              Node course_vb = node_course.getElementsByTagName("vb").item(0);                          int score_java = Integer.parseInt(course_java.getTextContent());                          int score_oracle = Integer.parseInt(course_oracle.getTextContent());                          int score_vb = Integer.parseInt(course_vb.getTextContent());                Student student = new Student(id, name, score_java, score_oracle, score_vb);              array.add(student);          }        return array;      }    /**       * 根据ID获取一个学生的信息       * @param sid       * @return       */      public static Student getStudentById(String sid){          NodeList students  = document.getElementsByTagName("student");                  for (int i = 0; i < students.getLength(); i++) {              Element node_student = (Element)students.item(i);              String id = node_student.getAttribute("sid");                          if(!id.equals(sid)){                              continue;              }              Node node_name = node_student.getElementsByTagName("name").item(0);              String name = node_name.getTextContent();              Element node_course = (Element)node_student.getElementsByTagName("course").item(0);              Node course_java = node_course.getElementsByTagName("java").item(0);              Node course_oracle = node_course.getElementsByTagName("oracle").item(0);              Node course_vb = node_course.getElementsByTagName("vb").item(0);                          int score_java = Integer.parseInt(course_java.getTextContent());                          int score_oracle = Integer.parseInt(course_oracle.getTextContent());                          int score_vb = Integer.parseInt(course_vb.getTextContent());                              Student student = new Student(id, name, score_java, score_oracle, score_vb);                          return student;          }        return null;      }    /**       * 添加学生       * @param student       */      public static void addStudent(Student student){          Element stu = document.createElement("student");          stu.setAttribute("sid", student.getId());          Element name = document.createElement("name");          name.setTextContent(student.getName());          Element course = document.createElement("course");          Element score_java = document.createElement("java");          Element score_oracle = document.createElement("oracle");          Element score_vb = document.createElement("vb");          score_java.setTextContent(String.valueOf(student.getScore_java()));          score_oracle.setTextContent(String.valueOf(student.getScore_oracle()));          score_vb.setTextContent(String.valueOf(student.getScore_vb()));            course.appendChild(score_java);          course.appendChild(score_oracle);          course.appendChild(score_vb);          stu.appendChild(name);          stu.appendChild(course);          document.getDocumentElement().appendChild(stu);          update(document, path);      }    /**       * 根据ID删除一个学生       * @param sid       */      public static void deleteStudentById(String sid){          NodeList students = document.getElementsByTagName("student");                  for (int i = 0; i < students.getLength(); i++) {              Element student = (Element)students.item(i);                          if(student.getAttribute("sid").equals(sid)){                  student.getParentNode().removeChild(student);              }          }          update(document,path);      }    /**       * 更新到文件       * @param document       * @param path       */      public static void update(Document document,String path){              try{              TransformerFactory transformerFactory = TransformerFactory.newInstance();              Transformer transformer = transformerFactory.newTransformer();              transformer.transform(new DOMSource(document), new StreamResult(new File(path)));          }catch(Exception e){              e.printStackTrace();          }        }  }

3.编写主测试程序 实现简易界面:

package com.dom.exercise;import java.util.ArrayList;import java.util.Scanner;public class Main {      public static void main(String[] args) {            Scanner scanner = new Scanner(System.in);                  boolean flag = true;                  while(flag){                      // 显示操作界面              System.console();              System.out.println("*********************操作界面*********************");              System.out.println("\t\t1.查询所有学生的成绩");              System.out.println("\t\t2.按照ID查询学生成绩 ");              System.out.println("\t\t3.添加一个学生");              System.out.println("\t\t4.按照ID删除一个学生");              System.out.println("\t\t0.退出系统");              System.out.println("************************************************");                          // 获取用户的操作              String operate = scanner.next();                          if ("1".equals(operate)) {                  ArrayList<Student> students = StudentService.readAll();                  System.out.println("所有的学生信息如下:");                  System.out.println("Name\tID\tJava\tOracle\tVB");                                  for (Student student : students) {                      System.out.println(student.getName() + "\t" + student.getId()                              + "\t" + student.getScore_java() + "\t"                              + student.getScore_oracle() + "\t"                              + student.getScore_vb());                  }              }else if("2".equals(operate)){                  System.out.println("请输入要查询的学生ID:");                  String sid = scanner.next();                  Student student = StudentService.getStudentById(sid);                  System.out.println("学号为"+sid+"的学生的信息如下:");                  System.out.println("Name\tID\tJava\tOracle\tVB");                  System.out.println(student.getName() + "\t" + student.getId()                          + "\t" + student.getScore_java() + "\t"                          + student.getScore_oracle() + "\t"                          + student.getScore_vb());              }else if("3".equals(operate)){                  System.out.println("请输入要添加的学生ID:");                  String sid = scanner.next();                  System.out.println("请输入要添加的学生姓名:");                  String name = scanner.next();                  System.out.println("请输入要添加的学生Java成绩:");                                  int score_java = Integer.parseInt(scanner.next());                  System.out.println("请输入要添加的学生Oracle成绩:");                                  int score_oracle = Integer.parseInt(scanner.next());                  System.out.println("请输入要添加的学生VB成绩:");                                  int score_vb = Integer.parseInt(scanner.next());                  Student student = new Student(sid, name, score_java, score_oracle, score_vb);                  StudentService.addStudent(student);                  System.out.println("添加成功!");              }else if("4".equals(operate)){                  System.out.println("请输入要删除的学生的ID:");                  String sid = scanner.next();                  StudentService.deleteStudentById(sid);                  System.out.println("删除成功!");              }              System.out.println("是否继续?(Y/N)");              flag = scanner.next().trim().toLowerCase().equals("y")?true:false;          }          scanner.close();      }  }

4.运行结果

问题的关键仍是DOM解析XML,对XML进行crud操作。

以上就是XML—DOM解析案例的内容,更多相关内容请关注PHP中文网(www.php.cn)!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: XML,DOM
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:XML—XML解析之SAX

相关资讯