网站建设服务协议 百度今日最新军事新闻
随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、QQ技术交流群(183198395)。
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"/>
</家庭>