所用xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<contactList>
<contact id="1" vip="true">
<name> Joseph </name>
<gender> male </gender>
<email> joseph@heaven.com </email>
</contact >
<contact id="2" vip="false">
<name> John </name>
<gender> male </gender>
<email> john@heaven.com </email>
</contact>
<contact id="3" vip="false">
<name> Deborah </name>
<gender> female </gender>
<email> deborah@heaven.com </email>
</contact>
<user>
<info>
<group id="12" >
<name id="10" > Michael </name>
</group>
</info>
</user>
</contactList>
框架包自行搜索dom4j下载导入,使用Junit框架@Test代替main方法,也需下载导入
测试代码
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.Test;
import java.io.InputStream;
import java.util.List;
public class Dom4jFirstDemo1 {
@Test
public void parseXML() throws Exception {
/**创建一个dom4j解析器,使用dom4j框架*/
SAXReader sax = new SAXReader();
// Document doc = sax.read(new File("xml_app/src/contactList1.xml"));
// Document doc = sax.read(new FileInputStream("xml_app/src/contactList1.xml"));
/**
* 直接到src下找文件的方法
* 先用本类名获取类,用类的方法getResourceAsStream直接再src目录下找xml文件
* 讲这个is传给sax.read方法获得源文件
*/
InputStream is = Dom4jFirstDemo1.class.getResourceAsStream("/contactList1.xml");
Document doc = sax.read(is);
/**
* 获取根元素
* 获取子元素
*/
Element root = doc.getRootElement();
System.out.println(root.getName());
List<Element> subEls = root.elements("contact");
for (Element subEl : subEls) {
System.out.println(subEl.getName());
System.out.println(subEl.elementTextTrim("name"));//trim是剪掉前后空格
System.out.println(subEl.elementTextTrim("gender"));
System.out.println(subEl.elementTextTrim("email"));
System.out.println("\r\n");
}
System.out.println("------divide line--------");
Element subEl = root.element("user");//获取为改名字的第一个子元素
System.out.println(subEl.elementText("group"));
Attribute att = root.element("contact").attribute("id");
Attribute att1 = root.element("contact").attribute("vip");
System.out.println(att.getName()+"----->"+att.getValue());
System.out.println(att1.getName()+"----->"+att1.getValue());
Element el2 = subEls.get(1);//获取第二个元素
Attribute att2 = el2.attribute("id");//获取第二个元素的属性
Attribute att3 = el2.attribute("vip");
System.out.println(att2.getName()+"----->"+att2.getValue());
System.out.println(att3.getName()+"----->"+att3.getValue());
}
}
解析后存入对象输出案例
联络人类
public class Liaison {
private String name;
private int id;
private boolean vip;
private char gender;
private String email;
public Liaison(String name, int id, boolean vip, char gender, String email) {
this.name = name;
this.id = id;
this.vip = vip;
this.gender = gender;
this.email = email;
}
public Liaison() {
}
@Override
public String toString() {
return "Contact{" +
"name='" + name + '\'' +
", id=" + id +
", vip=" + vip +
", gender=" + gender +
", email='" + email + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public boolean isVip() {
return vip;
}
public void setVip(boolean vip) {
this.vip = vip;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
执行体
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.Test;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class Dom4jDemo2 {
/**解析一个联系人xml文件,存到对象中去*/
@Test
public void parseXMLCreateOb() throws Exception {
SAXReader sx = new SAXReader();//生成解析器
InputStream is = Dom4jDemo2.class.getResourceAsStream("/contactList1.xml");
//生成源文件输入流
Document dc = sx.read(is);//得到源文件
Element root = dc.getRootElement();//得到根元素
List<Element> subEls = root.elements("contact");//所有叫contact的根元素下的一级子元素存入集合
List<Liaison> liaisons = new ArrayList<>();//准备将来要用的联络人集合
for (Element subEl : subEls) {
Liaison lia = new Liaison();//每次遍历到的一集子元素给建一个联络人对象
lia.setName(subEl.elementTextTrim("name"));
lia.setGender(subEl.elementTextTrim("gender").charAt(0));
lia.setEmail(subEl.elementTextTrim("email"));
//下面拿属性,必须attributeValue,否则报错
lia.setId(Integer.valueOf(subEl.attributeValue("id")));
lia.setVip(Boolean.valueOf(subEl.attributeValue("vip")));
//联络人成员变量全set之后存入集合
liaisons.add(lia);
}
//遍历联络人集合,输出打印
for (Liaison liaison : liaisons) {
System.out.println(liaison);
}
}
}
博客介绍了使用Java进行XML文件解析的相关内容。需自行搜索dom4j框架包下载导入,使用Junit框架的@Test代替main方法也需下载导入。还给出了解析后存入对象输出案例等测试代码。
417

被折叠的 条评论
为什么被折叠?



