最近,小白在复习解析XML发现基本分为两类SAX和DOM,其中DOM有分为DOM,JDOM,DOM4j
经过一些列的查询 比较 最终发现DOM4j才是WEB开发最常用的一种.
那咱们就随便列举几个特点就开始说吧!
1.基于树形结构 (这点就不用说了好像DOM都是树形)
2.由于DOM4j使用迭代器进行数据读取所以它的解析速度快 效率更高(在WEB框架中较多哦)
3.DOM4j和SAX都适合大文件,经过他们视频中测验之后 发现DOM4j才是王道啊 哈哈哈
对于大文件 是10M+的文本文件 。
差不多就这些了上干货吧
public class Person {
private String personid;
private String name;
private String address;
private String tel;
private String fax;
private String email;
public String getPersonid() {
return personid;
}
public void setPersonid(String personid) {
this.personid = personid;
}
public String getName() {
return name;
}
@Override
public String toString() {
return "Person [personid=" + personid + ", name=" + name + ", address=" + address + ", tel=" + tel + ", fax="
+ fax + ", email=" + email + "]";
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getFax() {
return fax;
}
public void setFax(String fax) {
this.fax = fax;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
以上是一个Person类相信大家没什么问题
下面就是咱们的XML文件了
<?xml version="1.0" encoding="UTF-8"?>
<people>
<person personid="E01">
<name>TonyBlair</name>
<address>10 Downing street,JJX,UK</address>
<tel> (061)98765</tel>
<fax>(061) 98765</fax>
<email>blaireverywhere.com</email>
</person>
<person personid="E02">
<name>Bill</name>
<address>20 Downing street, NewYork,UK</address>
<tel> (061)65487</tel>
<fax>(061)91238</fax>
<email>where.com</email>
</person></people>
测试方法如下
具体我就在代码逐行介绍了
public void dom4jParseXML() throws DocumentException {
//这行不要问我为啥 因为我也不会 背下来!(创建解析器对象)
SAXReader reader = new SAXReader();
//下面把xml文件转成输入流
InputStream is = Thread.currentThread().getContextClassLoader().
getResourceAsStream("com/jjj/person.xml");
//用输入流生成一个DOM4j的Document
//这里是把整个文档加载到内存
org.dom4j.Document doc = reader.read(is);
//这里获取到的结点是people
org.dom4j.Element rootElement = doc.getRootElement();
//这里利用迭代器获取person结点 这里获取到了是两个 所以下面会循环两次来生成两个person对象
Iterator<org.dom4j.Element>iterator = rootElement.elementIterator();
//声明一个数组来存储 pass
ArrayList<Person> persons = new ArrayList<>();
Person p = null;
//循环在这里
while(iterator.hasNext()) {
p = new Person();
//从迭代器中获取person元素
org.dom4j.Element e = iterator.next();
//赋值
p.setPersonid(e.attributeValue("personid"));
//这里生成的迭代器就是存储person的各种属性了name,address...
Iterator<org.dom4j.Element> iterator1 = e.elementIterator();
while(iterator1.hasNext()) {
//获取一个元素结点
org.dom4j.Element next = iterator1.next();
//获取属性名字赋值
String tag = next.getName();
if("name".equals(tag)) {
p.setName(next.getText());//得到元素的值
}else if("address".equals(tag)) {
p.setAddress(next.getText());
}else if("tel".equals(tag)) {
p.setTel(next.getText());
}
else if("fax".equals(tag)) {
p.setFax(next.getText());
}
else if("email".equals(tag)) {
p.setEmail(next.getText());
}
}
persons.add(p);
}
写到这里也就差不多了 如果你想运行需要jar包,评论区找我要就行,看见了就会回。
以上可能有错误或者问题请大佬指出。
谢谢!