Java中如何解析XML文件

Java中如何解析XML文件

xml文件:"student.xml"
xml 代码


    <?xml version="1.0" encoding="UTF-8"?>   
    <!DOCTYPE zmclass SYSTEM "student.dtd">   
    <zmclass id="0703">   
    <student sex="男">   
      <name>MICHAEL</name>   
      <age>24</age>   
      <address>武汉</address>   
    </student>   
    <student sex="女">   
      <name>王黎</name>   
      <age>24</age>   
      <address>武汉</address>   
    </student>   
    <student sex="男">   
      <name>莫智洲</name>   
      <age>24</age>   
      <address>武汉</address>   
    </student>   
    <student sex="男">   
      <name>曹锋</name>   
      <age>23</age>   
      <address>武汉</address>   
    </student>   
    </zmclass>  

dtd文件:"student.dtd"
python 代码


    <!--   
    ELEMENT 元素   
    ATTLIST 属性   
    元素出现的次数:   
    *: 从“0”到“N”。   
    +: 大于等于“1”   
    ?: 是“0”或者是“1”。   
    默认: 只可能是“1”。   
     
    常用属性类型:   
    CDATA:一般的文字。   
    ID:该属性在XML文件中是唯一的,常用来表示身份证。   
     
    ETC......   
     
    #REQUIRED 大写   
    #required 小写   
    表示在标记中必须出现此属性。   
     
    #IMPLIED 大写   
    #implied 小写   
    表示在标记中可以不出现的属性。   
     
    #FIX 大写   
    #fix  小写   
    表示在标记中是某个固定的值。   
    -->   
    <!ELEMENT zmclass (student+)>   
    <!ELEMENT name (#PCDATA)>   
    <!ELEMENT address (#PCDATA)>   
    <!ELEMENT age (#PCDATA)>   
    <!ATTLIST zmclass id CDATA #REQUIRED>   
    <!--建立“父子”关系-->   
    <!ELEMENT zmclass (name,address,age)>   
    <!ATTLIST student sex (男|女) #REQUIRED>  

java文件:"DomTest.java"



    package test;   
    /**  
    *  
    * @描述:解析XML文件的测试类。     
    */   
    import java.io.File;   
    import java.io.IOException;   
    import java.util.ArrayList;   
    import java.util.Iterator;   
    import java.util.List;   
    import javax.xml.parsers.DocumentBuilder;   
    import javax.xml.parsers.DocumentBuilderFactory;   
    import javax.xml.parsers.ParserConfigurationException;   
    import org.w3c.dom.Document;   
    import org.w3c.dom.Element;   
    import org.w3c.dom.Node;   
    import org.w3c.dom.NodeList;   
    import org.xml.sax.SAXException;   
    public class DomTest {   
    public static void main(String[] args){   
      List stuArrList = new ArrayList();//创建用来保存学生信息的集合。   
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();   
      try {   
       DocumentBuilder builder = factory.newDocumentBuilder();   
       Document doc = builder.parse(new File("student.xml"));   
       Element root = doc.getDocumentElement();//得到文档对象树。   
       //System.out.println(root);   
       System.out.println("根元素名称:"+root.getTagName());   
       NodeList stuList = root.getElementsByTagName("student");   
       //开始逐个创建学生对象。   
       for(int i = 0; i < stuList.getLength();i++){   
        Student s = new Student();   
        Element stuE = (Element)stuList.item(i);   
        //System.out.println(stuE);   
        s.setSex(stuE.getAttribute("sex"));//向学生对象中写入性别属性。   
        NodeList stuInfoList = stuE.getChildNodes();   
        for(int j = 0;j < stuInfoList.getLength();j++){   
         Node temp = stuInfoList.item(j);   
         if(temp.getNodeType()==Node.ELEMENT_NODE){//判断对象的类型的节点是不是元素。   
          Element tempE = (Element)temp;//转换类型到元素。   
          Node initW = tempE.getLastChild();   
          //Node initW = tempE.getFirstChild();   
          //由于只有一个节点,第一和最后一个都是同一个。   
          if("name".equals(tempE.getNodeName())){   
           s.setName(initW.getNodeValue());//加入姓名。   
          }if("age".equals(tempE.getNodeName())){   
           s.setAge((Integer.parseInt(initW.getNodeValue())));//加入年龄。   
          }if("address".equals(tempE.getNodeName())){   
           s.setAddress((initW.getNodeValue()));//加入地址。   
          }   
         }   
        }   
        stuArrList.add(s);//添加进集合中。   
       }   
       Iterator ite = stuArrList.iterator();//使用跌代器遍历集合元素。   
       while(ite.hasNext()){   
        Student s = (Student)ite.next();   
        System.out.println(s);   
       }   
      } catch (ParserConfigurationException e) {   
       e.printStackTrace();   
      } catch (SAXException e) {   
       e.printStackTrace();   
      } catch (IOException e) {   
       e.printStackTrace();   
      }   
    }   
    }    

java 代码

java文件:"Student.java"
java 代码


    package test;   
    /**  
    *  
    * @描述:学生类用来保存学生的信息。
    */   
    public class Student {   
    private String name;   
    private String sex;   
    private int age;   
    private String address;   
    public String toString(){//覆盖该方法。   
      return name+"-"+sex+"-"+age+"-"+address;   
    }   
    public String getAddress() {   
      return address;   
    }   
    public void setAddress(String address) {   
      this.address = address;   
    }   
    public int getAge() {   
      return age;   
    }   
    public void setAge(int age) {   
      this.age = age;   
    }   
    public String getName() {   
      return name;   
    }   
    public void setName(String name) {   
      this.name = name;   
    }   
    public String getSex() {   
      return sex;   
    }   
    public void setSex(String sex) {   
      this.sex = sex;   
    }   
    }  



运行结果:
ruby 代码


    根元素名称:zmclass   
    MICHAEL-男-24-武汉   
    王黎-女-24-武汉   
    莫智洲-男-24-武汉   
    曹锋-男-23-武汉   

猜你喜欢

转载自xzhijun-893.iteye.com/blog/1748403
今日推荐