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文件的测试类。
- * @作者: 赵明
- * 2007-9-5
- */
- 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;
- /**
- *
- * @描述:学生类用来保存学生的信息。
- * @作者: 赵明
- * 2007-9-5
- */
- 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-武汉