XML解析

来源:互联网 发布:材料记账软件 编辑:程序博客网 时间:2024/06/07 02:45

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"/></家庭>  


 

 

原创粉丝点击