DOM解析XML

刺骨的言语ヽ痛彻心扉 2024-04-18 14:18 143阅读 0赞

下面是DOM解析XML的示例,包括三个文件employee.xml、Employee.java、DomEmployee.java

1.被解析的employee.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE employees [
  3. <!ELEMENT employees (employee*)>
  4. <!ELEMENT employee (name,age,gender,email,salary)>
  5. <!ATTLIST employee id CDATA #IMPLIED>
  6. <!ATTLIST employee depName CDATA #IMPLIED>
  7. <!ELEMENT name (#PCDATA)>
  8. <!ELEMENT age (#PCDATA)>
  9. <!ELEMENT gender (#PCDATA)>
  10. <!ELEMENT email (#PCDATA)>
  11. <!ELEMENT salary (#PCDATA)>
  12. ]>
  13. <employees>
  14. <employee id="1" depName="教学部">
  15. <name>tom</name>
  16. <age>20</age>
  17. <gender>male</gender>
  18. <email>tom@163.com</email>
  19. <salary>10k</salary>
  20. </employee>
  21. <employee id="2" depName="教学部">
  22. <name>jack</name>
  23. <age>30</age>
  24. <gender>female</gender>
  25. <email>jack@163.com</email>
  26. <salary>8k</salary>
  27. </employee>
  28. <employee id="3" depName="市场部">
  29. <name>rose</name>
  30. <age>25</age>
  31. <gender>female</gender>
  32. <email>rose@163.com</email>
  33. <salary>5k</salary>
  34. </employee>
  35. <employee id="4" depName="教学管理部">
  36. <name>mark</name>
  37. <age>30</age>
  38. <gender>male</gender>
  39. <email>mark@163.com</email>
  40. <salary>5k</salary>
  41. </employee>
  42. </employees>

2.Employee.java文件

  1. package exercise;
  2. public class Employee {
  3. private int id;
  4. private String depName;
  5. private String name;
  6. private int age;
  7. private String gender;
  8. private String email;
  9. private String salary;
  10. public Employee() {
  11. }
  12. public Employee(int id, String depName, String name, int age, String gender, String email, String salary) {
  13. super();
  14. this.id = id;
  15. this.depName = depName;
  16. this.name = name;
  17. this.age = age;
  18. this.gender = gender;
  19. this.email = email;
  20. this.salary = salary;
  21. }
  22. @Override
  23. public String toString() {
  24. return "Employee [id=" + id + ", depName=" + depName + ", name=" + name + ", age=" + age + ", gender=" + gender
  25. + ", email=" + email + ", salary=" + salary + "]";
  26. }
  27. public int getId() {
  28. return id;
  29. }
  30. public void setId(int id) {
  31. this.id = id;
  32. }
  33. public String getDepName() {
  34. return depName;
  35. }
  36. public void setDepName(String depName) {
  37. this.depName = depName;
  38. }
  39. public String getName() {
  40. return name;
  41. }
  42. public void setName(String name) {
  43. this.name = name;
  44. }
  45. public int getAge() {
  46. return age;
  47. }
  48. public void setAge(int age) {
  49. this.age = age;
  50. }
  51. public String getGender() {
  52. return gender;
  53. }
  54. public void setGender(String gender) {
  55. this.gender = gender;
  56. }
  57. public String getEmail() {
  58. return email;
  59. }
  60. public void setEmail(String email) {
  61. this.email = email;
  62. }
  63. public String getSalary() {
  64. return salary;
  65. }
  66. public void setSalary(String salary) {
  67. this.salary = salary;
  68. }
  69. }

3.DomEmployee.java实现解析

  1. package exercise;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import javax.xml.parsers.DocumentBuilder;
  6. import javax.xml.parsers.DocumentBuilderFactory;
  7. import javax.xml.parsers.ParserConfigurationException;
  8. import org.w3c.dom.Document;
  9. import org.w3c.dom.Element;
  10. import org.w3c.dom.Node;
  11. import org.w3c.dom.NodeList;
  12. /**
  13. * 我们利用Dom解析读取employee.xml文件中的员工信息,将其存放到容器中
  14. * 同时我们加入封装的思想
  15. * @author www11
  16. *
  17. */
  18. public class DomEmployee {
  19. private List<Employee> list; //创建一个容器用于保存Employee对象
  20. private Employee employee; //接受每一个employee
  21. public DomEmployee() { //构造器
  22. list = new ArrayList<Employee>();
  23. }
  24. public List<Employee> getList() { //提供getList()方法,从外部获取
  25. return list;
  26. }
  27. //获取文档树类型对象的函数,大家不要被try..catch语句给迷惑,代码很简单
  28. private Document getDocument(File file) {
  29. //1.创建Dom解析工厂
  30. DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
  31. Document document = null;
  32. //2.用工厂生成一个Dom构建器
  33. try {
  34. DocumentBuilder builder = factory.newDocumentBuilder();
  35. try {
  36. //3.用Dom构建器去调用其中的解析方法,方法返回一个文档树类型的对象,我们只要对这个文档树对象操作就可以得到想要的结果了
  37. document = builder.parse(file);
  38. }catch (Exception e) {
  39. e.printStackTrace();
  40. }
  41. } catch (ParserConfigurationException e) {
  42. e.printStackTrace();
  43. }
  44. return document;
  45. }
  46. //将获取到的文档解析出来的结果添加到list中
  47. private void parser(Document document) {
  48. //直接通过标签名获得节点集合
  49. NodeList nodeList = document.getElementsByTagName("employee");
  50. for(int i = 0; i < nodeList.getLength();i++) {
  51. //将每一个节点转换为元素类型
  52. Element e = (Element)nodeList.item(i);
  53. employee = new Employee();
  54. String id = e.getAttribute("id"); //通过属性名直接获取属性值
  55. String depName = e.getAttribute("depName");
  56. employee.setId(Integer.parseInt(id)); //将获取到的值赋给employee
  57. employee.setDepName(depName);
  58. NodeList nodeList2 = e.getChildNodes(); //获取到子节点集合,其中包括name,age,gender,email,salary
  59. for(int j = 0;j<nodeList2.getLength();j++) {
  60. if(nodeList2.item(j).getNodeType() == Node.ELEMENT_NODE) { //这个判断用于去掉空文本
  61. String name = nodeList2.item(j).getNodeName(); //获取到当前节点的名字
  62. String value = nodeList2.item(j).getTextContent(); //获取到当前节点的文本内容
  63. //将对应的值赋给相应的变量
  64. if(name.equals("name")) {
  65. employee.setName(value);
  66. }else if(name.equals("age")) {
  67. employee.setAge(Integer.parseInt(value));
  68. }else if(name.equals("gender")) {
  69. employee.setGender(value);
  70. }else if(name.equals("email")) {
  71. employee.setEmail(value);
  72. }else if(name.equals("salary")) {
  73. employee.setSalary(value);
  74. }
  75. }
  76. }
  77. list.add(employee); //将本次读取到的employee加入到容器中
  78. }
  79. }
  80. //主函数测试
  81. public static void main(String[] args) throws Exception {
  82. DomEmployee dom = new DomEmployee();
  83. File file = new File("src/exercise/employee.xml");
  84. Document document = dom.getDocument(file);
  85. dom.parser(document);
  86. List<Employee> list = dom.getList();
  87. for(Employee e : list) {
  88. System.out.println(e);
  89. }
  90. }
  91. }

发表评论

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

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

相关阅读

    相关 DOM解析XML

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

    相关 DOM解析XML

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

    相关 DOM解析XML

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