XML解析

XML示例:

<?xml version="1.0" encoding='utf-8'?>  <!-- 声明-->
<studentList>  <!-- 根元素,一个XML文件有且只有一个根元素,所有的元素和子元素都必须在根元素中定义-->

  <student id="1">
    <name>张三</name>
    <sex>男</sex>
    <birthday>1986-12-21</birthday>
  </student>

  <student id="2">
	<name>李四</name>
	<sex>女</sex>
	<birthday>1990-09-10</birthday>
  </student>

  <student id="3">
	<name>王五</name>
	<sex>男</sex>
	<birthday>1989-03-20</birthday>
  </student>

  <student id="4">
	<name>赵六</name>
	<sex>男</sex>
	<birthday>1985-05-23</birthday>
  </student>

</studentList>


使用DOM4J解析XML:

package com.lovo.test;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.lovo.bean.Student;

public class DomTest {
	/**
	 * 解析XML,将XML的数据封装成List集合
	 * 
	 * @return Student对象的集合
	 */
	public List<Student> getList() {
		List<Student> list = new ArrayList<Student>();
		SAXReader sax = new SAXReader();// 产生sax解析对象
		try {
			Document doc = sax.read("student.xml"); // 读取文档,将文档内容封装成Document对象
			// 读取Student根元素下的student子元素,返回所有student标记的元素集合,一个Element封装一个student标记
			List<Element> eleList = doc.selectNodes("/studentList/student");
			for (Element e : eleList) {
				Student s = new Student();
				String idStr = e.attributeValue("id");// 得到每个student标记中的id属性的值
				String name = e.elementText("name");// 得到student子标签name中间的内容
				String sex = e.elementText("sex");// 得到student子标签sex中间的内容
				String birthday = e.elementText("birthday");// 得到student子标签birthday中间的内容
				// 将XML中student标记得到的数据封装成Student对象
				s.setId(Integer.parseInt(idStr));
				s.setName(name);
				s.setSex(sex);
				s.setBirthday(Date.valueOf(birthday));
				list.add(s);

			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return list;
	}

	public static void main(String[] args) {
		DomTest d = new DomTest();
		List<Student> list = d.getList();
		System.out.println(list);
	}

}


Student实体类:

package com.lovo.bean;

import java.sql.Date;

public class Student implements java.io.Serializable{
private int id;
private String name;
private String sex;
private Date birthday;
public Student() {
	super();
}
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
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;
}
public Date getBirthday() {
	return birthday;
}
public void setBirthday(Date birthday) {
	this.birthday = birthday;
}
public String toString(){
	return this.id+"  "+this.name+"  "+this.sex+"  "+this.birthday;
}
}


DTD的书写:

<?xml version="1.0" encoding="GB2312" ?>
<!DOCTYPE 家庭 [       <!-- 定义XML文件的根元素为家庭-->
 <!ELEMENT 家庭 (人+,家电*)>     <!--定义元素家庭的子元素有人和家电,人至少有一个,没有上限;家电可以没有,也可以有多个 -->
 <! ELEMENT 人 (#PCDATA)>    <!-- 表示人标记中的内容为文本 -->
 <!ELEMENT 家电 EMPTY>     <!-- 表示空标记,标记之间没有内容  -->
 <!ATTLIST 人
  名字 CDATA #REQUIRED
  性别 (男|女) #REQUIRED
  年龄 CDATA #REQUIRED
  爱好 CDATA #IMPLIED
 > <!--  表示定义人标记的属性,CDATA表示该属性的内容为文本,在书写标记时, #REQUIRED表示该属性必须存在 ,#IMPLIED表示该属性可有可无,(男|女)表示该属性的取值为男或女 -->
 <!ATTLIST 家电
   名称 CDATA #REQUIRED
   数量 CDATA #REQUIRED
   说明 CDATA #IMPLIED
 >
]> 
<家庭>  <!-- 符合上面DTD规范的XML示例 -->
	<人 名字="郭大路" 性别="男" 年龄="25">ffff</人>
	<人 名字="李寻欢" 性别="男" 年龄="38" 爱好="看书"/>
	<家电 名称="彩电" 数量="3"/>
</家庭>  


 

 

你可能感兴趣的:(xml,xml解析)