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); } }