JavaEE学习日志持续更新----> 必看!JavaEE学习路线(文章总汇)
JavaEE学习日志(四十八)
dom4j
XML解析和解析器
当将数据存储在XML后,我们就希望通过程序获得XML的内容。如果我们使用Java基础所学习的IO知识是可以完成的,不过你需要非常繁琐的操作才可以完成,且开发中会遇到不同问题(只读、读写)。人们为不同问题提供不同的解析方式,并提交对应的解析器,方便开发人员操作XML。
三种常用的解析方式
常用的解析开发包
dom树
dom4j核心类介绍
dom4j:DOM的解析工具
核心类:SAXReader
作用:
- 读取指定的xml
- 读完后把整个文件存储到内存中
- 返回对象Document
方法:Document read("xml文件路径")
返回值就是Document对象
Document对象:表示整个xml文档
方法:
Element getRootElement()
:获取文档的根元素
返回值是根标签对象:Element
Element对象:表示的是标签对象
方法:
List<Element> elements()
获取所有子标签,返回list集合,获取的子标签也是ElementString attributeValue("属性名")
获取标签对象的属性值,返回值StringString getText()
获取标签体的文本
dom4j读取xml
需要被读取的xml
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="001" className="cn.itcast.demo.User">
<property name="user" value="jack">qq</property>
<property name="user" value="rose">weixin</property>
</bean>
<bean id="002" className="cn.itcast.demo.Admin">
<property name="user" value="admin">feixin</property>
<property name="user" value="write">msn</property>
</bean>
</beans>
读取xml文件
public class DomReadXml {
public static void main(String[] args) throws Exception {
//创建核心类对象
SAXReader sax = new SAXReader();
//sax对象的方法read()读取xml
Document document = sax.read("test/xml/data.xml");
System.out.println(document);
//document方法,获取根标签
Element rootElement = document.getRootElement();
System.out.println(rootElement);
//根标签获取子标签
List<Element> beanElements = rootElement.elements();
//遍历集合,取出每个bean标签
for (Element beanElement : beanElements) {
//遍历,每个beanElement表示子标签bean
//获取bean标签的属性值
String id = beanElement.attributeValue("id");
String className = beanElement.attributeValue("className");
System.out.println(id+"=="+className);
//beanElement获取bean的子标签property
List<Element> propertyElements = beanElement.elements();
for (Element propertyElement : propertyElements) {
//propertyElement就是property标签对象
//获取标签属性
String name = propertyElement.attributeValue("name");
String value = propertyElement.attributeValue("value");
//获取标签体文本
String text = propertyElement.getText();
System.out.println("\t"+name+"=="+value+"=="+text);
}
}
}
}
结果
xpath介绍
XPath 是一门在 XML、html 文档中查找信息的语言。
使用xpth的原因:由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便,结合XPATH就可以直接获取到某个元素。
xpath:快速定位查找,在DOM对象中,快速找到想要的元素
xpath工具的方法:
List<Node> selectNodes("xpath查找表达式")
获取多个节点Node selectSingleNode("xpath查找表达式")
获取一个节点
标签对象接口Element继承Node接口,所以可以进行强转
xpath查找表达式:
xpath快速查询
一个xml
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student number="heima_001">
<name>
<xing>张</xing>
<ming>三</ming>
</name>
<age>30</age>
<gender>男</gender>
</student>
<student number="heima_002">
<name id="itcast2">a
<xing>李</xing>
<ming>四</ming>
</name>
<age>20</age>
<gender>女</gender>
</student>
</students>
读取xml中的某一个标签中的文本
public class XPathReadXml {
public static void main(String[] args) throws DocumentException {
SAXReader sax = new SAXReader();
Document document = sax.read("test/xml/student.xml");
//AAA//BBB//CCC
Element element = (Element) document.selectSingleNode("//students//student//name//xing");
System.out.println(element.getText());//张
//BBB
element = (Element) document.selectSingleNode("//ming");
System.out.println(element.getText());//三
element = (Element) document.selectSingleNode("//ming[last()]");
System.out.println(element.getText());//三
element = (Element) document.selectSingleNode("//students//student[last()]//ming[last()]");
System.out.println(element.getText());//四
//element = (Element) document.selectSingleNode("//name[id='itcast2']");
//System.out.println(element.getText());//NullPointerException
element = (Element) document.selectSingleNode("//students//student//name[@id='itcast2']");
System.out.println(element.getText());//a
}
}