image.png
    导包别导错了:
    image.png

    1. package com.itheima.d1_dom4j;
    2. import org.dom4j.Attribute;
    3. import org.dom4j.Document;
    4. import org.dom4j.Element;
    5. import org.dom4j.io.SAXReader;
    6. import org.junit.Test;
    7. import java.io.InputStream;
    8. import java.util.List;
    9. /**
    10. * 目标:学会使用dom4j(框架)解析XML文件中的数据
    11. * 1. 导入dom4j框架
    12. * 2. 准备一个XML文件
    13. */
    14. public class Dom4JHelloWorldDemo1 {
    15. @Test
    16. public void parseXMLData() throws Exception {
    17. // 1. 创建一个Dom4j的解析器对象,代表了整个dom4j框架
    18. SAXReader saxReader = new SAXReader();
    19. // 2. 把XML文件加载到内存中成为一个Document文档对象
    20. // 在开发中不会通过文件名去定位: 因为相对路径的模块名会被改
    21. // Document document = saxReader.read(new File("xml-app\\src\\Contacts.xml"));
    22. // 一般使用类对象(类名.class)提供的输入流 getResourceAsStream从源头获取流,里面的参数写/文件名(返回的是一个输入流对象)
    23. // 注意:只有getResourceAsStream中的/是直接去src下寻找文件
    24. InputStream is = Dom4JHelloWorldDemo1.class.getResourceAsStream("/Contacts.xml");
    25. Document document = saxReader.read(is); // 把xml文件,读成了文档对象
    26. // 3. 获取根元素对象
    27. Element rootElement = document.getRootElement();
    28. // 获取根元素对象的名字:
    29. System.out.println(rootElement.getName()); //<contactList>
    30. // 4. 拿根元素下的全部子元素的对象
    31. // elements是拿到当前元素(现在是根元素的对象contactList)所有的子元素(返回的是一个List集合)
    32. // elements 里面写指定元素的参数,可以得到当前指定元素下指定名字的子元素集合返回
    33. List<Element> elements = rootElement.elements("user"); // 拿到子元素为user的
    34. for (Element element : elements) {
    35. // 将遍历的每个元素的对象,把他们的名字打印出来
    36. System.out.println(element.getName());
    37. }
    38. // 拿某个子元素
    39. Element userEle = rootElement.element("user");// 拿根元素下的user子元素
    40. System.out.println(userEle.getName());
    41. // 默认提取第一个子元素对象(如果整个xml文件中,出现多个相同的子元素,而你要提取当个的话)
    42. Element contact = rootElement.element("contact");
    43. System.out.println(contact.getName());
    44. // 拿子元素的文本内容
    45. Element contact1 = rootElement.element("contact");
    46. System.out.println(contact1.elementText("name")); // 拿子元素下的标签为name的文本
    47. // 去掉前后空格 Trim是修剪的意思
    48. System.out.println(contact.elementTextTrim("name"));
    49. // 根据元素获取属性值
    50. Attribute idAttr = contact.attribute("id"); // 获取元素为id的对象
    51. System.out.println(idAttr.getName() + "-->" + idAttr.getValue());
    52. // 获取当前元素下的子元素对象
    53. Element email = contact.element("email");
    54. System.out.println(email.getText());
    55. // 直接提取属性值
    56. System.out.println(contact.attributeValue("id")); // 提取子元素contact的属性为id的值
    57. System.out.println(contact.attributeValue("vip"));
    58. }
    59. }