zoukankan      html  css  js  c++  java
  • 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-武汉   
  • 相关阅读:
    FP-growth算法思想和其python实现
    HDInsight Command
    OpsMgr Connector 20070
    Exchange: How to get Mailbox size in Exchange Shell?
    Get members for ‘Dynamic Distribution Group’
    Hadoop 学习之路-开篇
    Office365 配置完成ADFS之后修改密码之后需要删除登陆信息
    添加只读访问权限到邮箱里的所有文件夹
    使用 Windows PowerShell 连接到 Lync Online
    windows 7无法打补丁
  • 原文地址:https://www.cnblogs.com/licheng/p/1128376.html
Copyright © 2011-2022 走看看