1.Document对象:整个xml文档
Element对象:标签
Attribute对象:属性
Text对象:文本内容
(后三个属于Node对象)
2.步骤:
(1)去官网下载Dom4j框架:dom4j-2.1.1.jar(版本依据自己定)
(2)在项目中创建一个文件夹,lib
(3)将dom4j-2.1.1.jar文件复制到lib文件夹下
(4)在jar文件上点右键,选择Add as Library,然后点击OK
(5)在类中导包使用
3.这里先写一个xml文档 文档名叫Contacts.xml
(1)
<?xml version="1.0" encoding="UTF-8"?>
<contactList>
<contact id="1" vip="true">
<name> 张三 </name>
<gender>女</gender>
<email>panpan@itcast.cn</email>
</contact>
<contact id="2" vip="false">
<name> 李四 </name>
<gender>男</gender>
<email>xiaozhan@itcast.cn</email>
</contact>
<contact id="3" vip="false">
<name> 王五 </name>
<gender>男</gender>
<email>nananan@itcast.cn</email>
</contact>
<user>
</user>
</contactList>
(2)一些常用的方法 :
public class Dom4jDemo1{
@Text
public void parseXMLDate()throws Exception{
//1.创建一个Dom4j的解析器对象,代表了整个Dom4j框架
SAXReader saxReader=new SAXReader();
//2.把XML文件加载到内存中成为一个Document文档对象 有三种方式(1)
// Document document=saxReader.read(new File("xml-app\\src\\Contacts.xml"));//这里填的是xml文件所在路径,需要模块名,Contacts.xml为xml文件名
//(2)
//Document document=saxReader.read(new FileInputStream("xml-app\\src\\Contacts.xml"));//这里填的是xml文件所在路径,需要模块名,Contacts.xml为xml文件名
//(3) 注意:getResourceAsStream中的/是直接去src下寻找的文件
InputStream is=Dom4jDemo1.class.getResourceAsStream("/Contacts.xml");
Document document=saxReader.read(is);
//3.获取根元素对象
Element root=document.getRootElement();
System.out.println(root.getName());
//4.拿根元素下的全部子元素对象(一级)
List<Element> sonEles1=root.elements();//取全部子元素对象
List<Element> sonEles2=root.elements("Contact");//取全部Contact子元素对象
for(Element sonEle:sonEles){
System.out.println(sonEle.getName());
}
//拿某个子元素
Element zEle=root.element("user");//后面输入的是所要的子元素
System.out.println(zEle.getName());
//假如xml文件中有多个名称相同的子元素,则默认取第一个子元素。
Element contact=root.element("contact");//这里假设有多个contact
//获取子元素文本
System.out.println(contact.elementText("name");//这里打出来name对应的名称
//获取子元素文本,并去掉前后空格
System.out.println(contact.elementTextTrim("name");
//根据元素获取属性值
Attribute attr=contact.attribute("id");
System.out.println(attr.getName()+"--->"+attr.getValue());
//直接取属性值
System.out.println(contact.attrbuteValue("id"));
}
}
(3)下面写一个案例:解析xml中的数据成为一个List集合对象,并输出内容( 此案例需要创建一个Contact类,里面要包括姓名name,性别Gender,id,email,vip 成员变量,并且给出get set 方法,给出有参无参构造器,并且要重写toString方法 这里没有创建此类,需自己创建)
public class text{
public void parseToList()throws Exception{
//1.导入框架
//2.创建SaxReader对象
SAXReader saxReader=new SAXReader();
//3.加载xml文件成为文档对象Document对象
InputStream is=text.class.getResourceAsStream("/Contacts.xml");
Document document=saxReader.read(is);
//4.先拿根元素
Element root=document.getRootElement();
//5.提取contact子元素
List<Element> contactEles=root.elements("contact");
//6.准备一个ArrayList集合封装联系人信息
List<Contact> contacts=new ArrayList<>();
//7.遍历contact子元素(和第5步关联)
for(Element contactEle:contactEles){
//8.每个子元素都是一个联系人对象
Contact contact=new Contact();
contact.setId(Integer.valueOf(contactEle.attributeValue("id")));
contact.setVip(Boolean.valueOf(contactEle.attributeValue("Vip")));
contact.setName(contactEle.elementTextTrim("name"));
contact.setGender(contactEle.elementTextTrim("Gender").charAt(0));
contact.setEmail(contactEle.elementText("email"));
//9.把联系人对象数据加入到List集合
contacts.add(contact);
//10.遍历List集合
for(Contact contact:contacts){
System.out.println(contact);
}
}
}