
导包别导错了:
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 {@Testpublic 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"));}}
