XML DOM解析XML文件

缺乏、安全感 2022-06-08 09:58 486阅读 0赞

采用DOM解析student.xml文件,将解析的每组数据保存在Student对象中,然后将Student对象添加到List集合。

注:解析器读入整个文档,然后构建一个驻留内存的树结构,使用 DOM 接口来操作这个树结构。

一、解析的XML文件(student.xml)

  1. <?xml version="1.0" encoding="utf-8" ?><!--xml文档声明-->
  2. <!--DTD约束-->
  3. <!DOCTYPE class [
  4. <!ELEMENT student (name,age,sex,height)>
  5. <!ELEMENT name (#PCDATA)>
  6. <!ELEMENT age (#PCDATA)>
  7. <!ELEMENT sex (#PCDATA)>
  8. <!ELEMENT height (#PCDATA)>
  9. ]>
  10. <!--只能有一个根标签-->
  11. <class>
  12. <!--设置属性-->
  13. <student id="1" user="lisi">
  14. <name>李四</name>
  15. <age>18</age>
  16. <sex></sex>
  17. <height>182</height>
  18. </student>
  19. <student id="2" user="wangwu">
  20. <name>王五</name>
  21. <age>19</age>
  22. <sex></sex>
  23. <height>172</height>
  24. </student>
  25. </class>

二、解析代码

  1. package com.xml.main;
  2. import org.w3c.dom.*;
  3. import org.xml.sax.SAXException;
  4. import javax.xml.parsers.DocumentBuilder;
  5. import javax.xml.parsers.DocumentBuilderFactory;
  6. import javax.xml.parsers.ParserConfigurationException;
  7. import java.io.File;
  8. import java.io.IOException;
  9. import java.util.ArrayList;
  10. public class DOMParseMain {
  11. public static void main(String[] args) {
  12. try {
  13. // 使用List存储解析到的学生信息
  14. ArrayList<Student> list = new ArrayList<>();
  15. //DOM解析的步骤
  16. //步骤一:创建DOM解析工厂
  17. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  18. //步骤二:通过解析工厂 创建一个XML文档解析者
  19. DocumentBuilder documentBuilder = factory.newDocumentBuilder();
  20. //步骤三: 解析指定XML文件
  21. Document document = documentBuilder.parse(new File("student.xml"));
  22. //开始解析
  23. Element documentElement = document.getDocumentElement();
  24. //获取根元素节点下所有的节点(包含此节点的所有子节点,如:元素节点,文本节点,注释节点,空格换行等)
  25. NodeList childNodes = documentElement.getChildNodes();
  26. for (int i = 0; i < childNodes.getLength(); i++) {
  27. Node item = childNodes.item(i);
  28. Student student = new Student();
  29. // 只获取元素节点并且节点名称为student
  30. if (item.getNodeType() == Node.ELEMENT_NODE && "student".equals(item.getNodeName())) {
  31. NamedNodeMap attributes = item.getAttributes();//得到Student所有的属性
  32. Node id = attributes.getNamedItem("id");//获取id节点
  33. String idValue = id.getNodeValue();//获取id的属性值
  34. Node user = attributes.getNamedItem("user");//获取user节点
  35. String userValue = user.getNodeValue();//获取user 属性值
  36. //添加信息到student对象中
  37. student.setId(Integer.parseInt(idValue));
  38. student.setUser(userValue);
  39. //遍历student节点下面的子节点
  40. NodeList childNodes1 = item.getChildNodes();
  41. for (int j = 0; j < childNodes1.getLength(); j++) {
  42. Node item1 = childNodes1.item(j);
  43. // 获取元素节点
  44. if (item1.getNodeType() == Node.ELEMENT_NODE) {
  45. switch (item1.getNodeName()) {
  46. case "name":
  47. String nameValue = item1.getFirstChild().getNodeValue();
  48. student.setName(nameValue);
  49. break;
  50. case "height":
  51. String heightValue = item1.getFirstChild().getNodeValue();
  52. student.setHeight(Double.parseDouble(heightValue));
  53. break;
  54. case "age":
  55. String ageValue = item1.getFirstChild().getNodeValue();
  56. student.setAge(Integer.parseInt(ageValue));
  57. break;
  58. case "sex":
  59. String sexValue = item1.getFirstChild().getNodeValue();
  60. student.setSex(sexValue);
  61. break;
  62. }
  63. }
  64. }
  65. list.add(student);
  66. }
  67. }
  68. //遍历List
  69. for (Student s : list) {
  70. System.out.println(s.toString());
  71. }
  72. } catch (ParserConfigurationException e) {
  73. e.printStackTrace();
  74. } catch (SAXException e) {
  75. e.printStackTrace();
  76. } catch (IOException e) {
  77. e.printStackTrace();
  78. } finally {
  79. }
  80. }
  81. }

三、Student.java

  1. package com.xml.main;
  2. public class Student {
  3. private int id;
  4. private String user;
  5. private String name;
  6. private String sex;
  7. private int age;
  8. private double height;
  9. public Student() {
  10. }
  11. public Student(int id, String user, String name, String sex, int age, double height) {
  12. this.id = id;
  13. this.user = user;
  14. this.name = name;
  15. this.sex = sex;
  16. this.age = age;
  17. this.height = height;
  18. }
  19. public int getId() {
  20. return id;
  21. }
  22. public void setId(int id) {
  23. this.id = id;
  24. }
  25. public String getUser() {
  26. return user;
  27. }
  28. public void setUser(String user) {
  29. this.user = user;
  30. }
  31. public String getName() {
  32. return name;
  33. }
  34. public void setName(String name) {
  35. this.name = name;
  36. }
  37. public String getSex() {
  38. return sex;
  39. }
  40. public void setSex(String sex) {
  41. this.sex = sex;
  42. }
  43. public int getAge() {
  44. return age;
  45. }
  46. public void setAge(int age) {
  47. this.age = age;
  48. }
  49. public double getHeight() {
  50. return height;
  51. }
  52. public void setHeight(double height) {
  53. this.height = height;
  54. }
  55. @Override
  56. public String toString() {
  57. return "Student{" +
  58. "id=" + id +
  59. ", user='" + user + '\'' +
  60. ", name='" + name + '\'' +
  61. ", sex='" + sex + '\'' +
  62. ", age=" + age +
  63. ", height=" + height +
  64. '}';
  65. }
  66. }

四、解析结果

Center

发表评论

表情:
评论列表 (有 0 条评论,486人围观)

还没有评论,来说两句吧...

相关阅读

    相关 DOM解析XML

    XML 结构是一种树型结构,处理步骤都差不多,Java 己经将它们封装成了现成的类库。目前流行的解析方法有三种,分别为 DOM、SAS 和 DOM4j。 DOM(Docume

    相关 DOM解析XML

    XML可以作为一种的简单数据存储。 DOM解析,是将XML中的数据组织成一棵树,树的一个一个节点就是XML文档中的数据。 DOM解析XML流程: 1.建立一个解析器工厂,