Java中如何解析XML文件

Java中如何解析XML文件

xml文件:"student.xml"

xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2. <!DOCTYPE zmclass SYSTEM "student.dtd">    
  3. <zmclass id="0703">    
  4. <student sex="男">    
  5.   <name>MICHAEL</name>    
  6.   <age>24</age>    
  7.   <address>武汉</address>    
  8. </student>    
  9. <student sex="女">    
  10.   <name>王黎</name>    
  11.   <age>24</age>    
  12.   <address>武汉</address>    
  13. </student>    
  14. <student sex="男">    
  15.   <name>莫智洲</name>    
  16.   <age>24</age>    
  17.   <address>武汉</address>    
  18. </student>    
  19. <student sex="男">    
  20.   <name>曹锋</name>    
  21.   <age>23</age>    
  22.   <address>武汉</address>    
  23. </student>    
  24. </zmclass>  

dtd文件:"student.dtd"

python 代码
  1. <!--    
  2. ELEMENT 元素    
  3. ATTLIST 属性    
  4. 元素出现的次数:    
  5. *: 从“0”到“N”。    
  6. +: 大于等于“1”    
  7. ?: 是“0”或者是“1”。    
  8. 默认: 只可能是“1”。    
  9.   
  10. 常用属性类型:    
  11. CDATA:一般的文字。    
  12. ID:该属性在XML文件中是唯一的,常用来表示身份证。    
  13.   
  14. ETC......    
  15.   
  16. #REQUIRED 大写    
  17. #required 小写    
  18. 表示在标记中必须出现此属性。    
  19.   
  20. #IMPLIED 大写    
  21. #implied 小写    
  22. 表示在标记中可以不出现的属性。    
  23.   
  24. #FIX 大写    
  25. #fix  小写    
  26. 表示在标记中是某个固定的值。    
  27. -->    
  28. <!ELEMENT zmclass (student+)>    
  29. <!ELEMENT name (#PCDATA)>    
  30. <!ELEMENT address (#PCDATA)>    
  31. <!ELEMENT age (#PCDATA)>    
  32. <!ATTLIST zmclass id CDATA #REQUIRED>    
  33. <!--建立“父子”关系-->    
  34. <!ELEMENT zmclass (name,address,age)>    
  35. <!ATTLIST student sex (男|女) #REQUIRED>  

java文件:"DomTest.java"

  1. package test;    
  2. /**   
  3.  
  4. * @描述:解析XML文件的测试类。   
  5. * @作者: 赵明   
  6. * 2007-9-5   
  7. */    
  8. import java.io.File;    
  9. import java.io.IOException;    
  10. import java.util.ArrayList;    
  11. import java.util.Iterator;    
  12. import java.util.List;    
  13. import javax.xml.parsers.DocumentBuilder;    
  14. import javax.xml.parsers.DocumentBuilderFactory;    
  15. import javax.xml.parsers.ParserConfigurationException;    
  16. import org.w3c.dom.Document;    
  17. import org.w3c.dom.Element;    
  18. import org.w3c.dom.Node;    
  19. import org.w3c.dom.NodeList;    
  20. import org.xml.sax.SAXException;    
  21. public class DomTest {    
  22. public static void main(String[] args){    
  23.   List stuArrList = new ArrayList();//创建用来保存学生信息的集合。    
  24.   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();    
  25.   try {    
  26.    DocumentBuilder builder = factory.newDocumentBuilder();    
  27.    Document doc = builder.parse(new File("student.xml"));    
  28.    Element root = doc.getDocumentElement();//得到文档对象树。    
  29.    //System.out.println(root);    
  30.    System.out.println("根元素名称:"+root.getTagName());    
  31.    NodeList stuList = root.getElementsByTagName("student");    
  32.    //开始逐个创建学生对象。    
  33.    for(int i = 0; i < stuList.getLength();i++){    
  34.     Student s = new Student();    
  35.     Element stuE = (Element)stuList.item(i);    
  36.     //System.out.println(stuE);    
  37.     s.setSex(stuE.getAttribute("sex"));//向学生对象中写入性别属性。    
  38.     NodeList stuInfoList = stuE.getChildNodes();    
  39.     for(int j = 0;j < stuInfoList.getLength();j++){    
  40.      Node temp = stuInfoList.item(j);    
  41.      if(temp.getNodeType()==Node.ELEMENT_NODE){//判断对象的类型的节点是不是元素。    
  42.       Element tempE = (Element)temp;//转换类型到元素。    
  43.       Node initW = tempE.getLastChild();    
  44.       //Node initW = tempE.getFirstChild();    
  45.       //由于只有一个节点,第一和最后一个都是同一个。    
  46.       if("name".equals(tempE.getNodeName())){    
  47.        s.setName(initW.getNodeValue());//加入姓名。    
  48.       }if("age".equals(tempE.getNodeName())){    
  49.        s.setAge((Integer.parseInt(initW.getNodeValue())));//加入年龄。    
  50.       }if("address".equals(tempE.getNodeName())){    
  51.        s.setAddress((initW.getNodeValue()));//加入地址。    
  52.       }    
  53.      }    
  54.     }    
  55.     stuArrList.add(s);//添加进集合中。    
  56.    }    
  57.    Iterator ite = stuArrList.iterator();//使用跌代器遍历集合元素。    
  58.    while(ite.hasNext()){    
  59.     Student s = (Student)ite.next();    
  60.     System.out.println(s);    
  61.    }    
  62.   } catch (ParserConfigurationException e) {    
  63.    e.printStackTrace();    
  64.   } catch (SAXException e) {    
  65.    e.printStackTrace();    
  66.   } catch (IOException e) {    
  67.    e.printStackTrace();    
  68.   }    
  69. }    
  70. }    
java 代码

java文件:"Student.java" 

java 代码
  1. package test;    
  2. /**   
  3.  
  4. * @描述:学生类用来保存学生的信息。   
  5. * @作者: 赵明   
  6. * 2007-9-5   
  7. */    
  8. public class Student {    
  9. private String name;    
  10. private String sex;    
  11. private int age;    
  12. private String address;    
  13. public String toString(){//覆盖该方法。    
  14.   return name+"-"+sex+"-"+age+"-"+address;    
  15. }    
  16. public String getAddress() {    
  17.   return address;    
  18. }    
  19. public void setAddress(String address) {    
  20.   this.address = address;    
  21. }    
  22. public int getAge() {    
  23.   return age;    
  24. }    
  25. public void setAge(int age) {    
  26.   this.age = age;    
  27. }    
  28. public String getName() {    
  29.   return name;    
  30. }    
  31. public void setName(String name) {    
  32.   this.name = name;    
  33. }    
  34. public String getSex() {    
  35.   return sex;    
  36. }    
  37. public void setSex(String sex) {    
  38.   this.sex = sex;    
  39. }    
  40. }  

运行结果:

ruby 代码
  1. 根元素名称:zmclass    
  2. MICHAEL-男-24-武汉    
  3. 王黎-女-24-武汉    
  4. 莫智洲-男-24-武汉    
  5. 曹锋-男-23-武汉   
原文地址:https://www.cnblogs.com/licheng/p/1128376.html