XML:XML的解析 - dom4j的使用

1 导入JAR包

 

 

 

2 API介绍

  使用核心类SaxReader加载xml文档获得Document,通过Document 对象获得文档的根元素,然后就可以操作了

  常用API如下: 

    1. SaxReader对象 

        read(…) 加载执行xml文档

    2. Document对象

        getRootElement() 获得根元素 

    3. Element对象 

        elements(…) 获得指定名称的所有子元素。(可以不指定名称)

        element(…) 获得指定名称的第一个子元素。(可以不指定名称)

        getName() 获得当前元素的元素名 

        attributeValue(…) 获得指定属性名的属性值 

        elementText(…) 获得指定名称子元素的文本值 

        getText() 获得当前元素的文本内容 

 

 

 

 

 

 

3 准备xml文件

编写user.xsd schema约束

<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns="http://www.lagou.com/xml"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.lagou.com/xml" elementFormDefault="qualified">

  <xsd:element name="users" type="usersType"/>   <xsd:complexType name="usersType">     <xsd:sequence>       <xsd:element name="user" type="userType" minOccurs="0" maxOccurs="unbounded"/>     </xsd:sequence>   </xsd:complexType>

  <xsd:complexType name="userType">     <xsd:sequence>       <xsd:element name="name" type="xsd:string"/>       <xsd:element name="age" type="ageType" />       <xsd:element name="hobby" type="hobbyType" />     </xsd:sequence>     <xsd:attribute name="id" type="numberType" use="required"/>   </xsd:complexType>

<xsd:simpleType name="ageType"> <xsd:restriction base="xsd:integer"> <xsd:minInclusive value="0"/> <xsd:maxInclusive value="100"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="hobbyType"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="抽烟"/> <xsd:enumeration value="喝酒"/> <xsd:enumeration value="烫头"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="numberType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d"/> </xsd:restriction> </xsd:simpleType> </xsd:schema>

 

编写user.xml 引入约束

<?xml version="1.0" encoding="UTF-8" ?>
<users
xmlns="http://www.lagou.com/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.lagou.com/xml user.xsd"
>
<user id="1">
<name>张百万</name>
<age>20</age>
<hobby>抽烟</hobby>
</user>
<user id="2">
<name>于谦</name>
<age>50</age>
<hobby>喝酒</hobby>
</user>
<user id="3">
<name>刘能</name>
<age>40</age>
<hobby>烫头</hobby>
</user>
</users>

 

读取XML

public class TestDOM4j {
//获取XML文件中的 所有的元素名称(标签)
@Test
public void test1() throws DocumentException {
//1.获取XML解析对象
SAXReader reader = new SAXReader();
//2.解析XML 获取 文档对象 document
Document document =
reader.read("H:\\jdbc_work\\xml_task03\\src\\com\\lagou\\xml03\\user.xml");
//3.获取根元素
Element rootElement = document.getRootElement();
//获取根元素名称
System.out.println(rootElement.getName());
//获取 根元素下的标签
List<Element> elements = rootElement.elements();
for (Element element : elements) {
System.out.println("根标签下的子节点: " + element.getName());
List<Element> eList = element.elements();
for (Element e : eList) {
System.out.println("user标签下的子节点" + e.getName());
}
break;
}
}
/**
* 获取具体的节点内容 获取张百万的所有信息
*/
@Test
public void test2() throws DocumentException {
//1.创建XML文档解析对象
SAXReader sr = new SAXReader();
//2.读取XML获取到document对象
Document document = sr.read("src\\com\\lagou\\xml02\\user.xml");
//3.获取根节点
Element rootElement = document.getRootElement();
//4.得到当前节点的 所有子节点
List<Element> elements = rootElement.elements();
//5.获取第一个子节点
Element user = elements.get(0);
//6.获取所有信息
String id = user.attributeValue("id");
String name = user.elementText("name");
String age = user.elementText("age");
//使用getText获取当前元素的文本内容
String hobby = user.element("hobby").getText();
//打印
System.out.println(id+" " + name +" " + age +" " + hobby);
}
}

 

posted @ 2021-07-27 16:20  Jasper2003  阅读(58)  评论(0编辑  收藏  举报