导包别导错了:
package com.itheima.d1_dom4j;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.io.InputStream;
import java.util.List;
/**
* 目标:学会使用dom4j(框架)解析XML文件中的数据
* 1. 导入dom4j框架
* 2. 准备一个XML文件
*/
public class Dom4JHelloWorldDemo1 {
@Test
public void parseXMLData() throws Exception {
// 1. 创建一个Dom4j的解析器对象,代表了整个dom4j框架
SAXReader saxReader = new SAXReader();
// 2. 把XML文件加载到内存中成为一个Document文档对象
// 在开发中不会通过文件名去定位: 因为相对路径的模块名会被改
// Document document = saxReader.read(new File("xml-app\\src\\Contacts.xml"));
// 一般使用类对象(类名.class)提供的输入流 getResourceAsStream从源头获取流,里面的参数写/文件名(返回的是一个输入流对象)
// 注意:只有getResourceAsStream中的/是直接去src下寻找文件
InputStream is = Dom4JHelloWorldDemo1.class.getResourceAsStream("/Contacts.xml");
Document document = saxReader.read(is); // 把xml文件,读成了文档对象
// 3. 获取根元素对象
Element rootElement = document.getRootElement();
// 获取根元素对象的名字:
System.out.println(rootElement.getName()); //<contactList>
// 4. 拿根元素下的全部子元素的对象
// elements是拿到当前元素(现在是根元素的对象contactList)所有的子元素(返回的是一个List集合)
// elements 里面写指定元素的参数,可以得到当前指定元素下指定名字的子元素集合返回
List<Element> elements = rootElement.elements("user"); // 拿到子元素为user的
for (Element element : elements) {
// 将遍历的每个元素的对象,把他们的名字打印出来
System.out.println(element.getName());
}
// 拿某个子元素
Element userEle = rootElement.element("user");// 拿根元素下的user子元素
System.out.println(userEle.getName());
// 默认提取第一个子元素对象(如果整个xml文件中,出现多个相同的子元素,而你要提取当个的话)
Element contact = rootElement.element("contact");
System.out.println(contact.getName());
// 拿子元素的文本内容
Element contact1 = rootElement.element("contact");
System.out.println(contact1.elementText("name")); // 拿子元素下的标签为name的文本
// 去掉前后空格 Trim是修剪的意思
System.out.println(contact.elementTextTrim("name"));
// 根据元素获取属性值
Attribute idAttr = contact.attribute("id"); // 获取元素为id的对象
System.out.println(idAttr.getName() + "-->" + idAttr.getValue());
// 获取当前元素下的子元素对象
Element email = contact.element("email");
System.out.println(email.getText());
// 直接提取属性值
System.out.println(contact.attributeValue("id")); // 提取子元素contact的属性为id的值
System.out.println(contact.attributeValue("vip"));
}
}