1.概述
我们在实际应用中,通常使用xml存储数据,或作为配置文件。所以需要获取到xml文件中的内容,转化为我们需要的内容。
xml是可扩展的标记语言,不管是html文件还是xml文件它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析。
Java对dom技术解析标记型文档也做了实现:
早期sun公司就制定了dom 技术,这个技术在解析xml的时候需要把整个xml文件加载到内存中,可以根据getElementsById、getElementsByName 、getElementsByTagName 等方法解析,但是效率低。
sun公司在JDK6版本对 dom解析技术进行了升级 :SAX解析
SAX解析技术:读取xml,理解为一行一行的去读取,读取下一行的时候,会把之前读取的内容进行释放。
sun公司的解析统称 JAXP。
第三方的解析:
pull、xStream、jDOM、dom4j。
dom4j:dom for java
本教程介绍dom4j技术
dom4j:是一个开源的api,属于第三方公司开发的产品(dom4j的api不在jdk中。)
如果要使用dom4j 需要去dom4j官网下载dom4j相关资料,去dom4j官网下载jar包http://dom4j.sourceforge.net/
2.Hello World
xml示例
工程引入jar包dom4j-1.6.1.jar
获取所有标签的文本值
<span style="font-size:14px;">public class Demo {
// 解析xml文档 获取所有文本内容
@Test
public void parse() throws DocumentException {
// 获取Document对象
SAXReader reader = new SAXReader();
Document document = reader.read("./schema/books.xml");// xml文档路径
// 获取根标签
Element root = document.getRootElement();
// 获取根标签的所有子标签
List<Element> books = root.elements();
// 遍历
for (Element book : books) {
// 获取每个子标签book的子标签
List<Element> bookChildren = book.elements();
// 遍历
for (Element child : bookChildren) {
// 获取标签文本
String text = child.getText();
System.out.println(text);
}
}
}</span>
输出内容:
葵花宝典
金庸
998
哈哈哈
呵呵
888
获取指定标签的文本值
<span style="font-size:14px;">// 获取指定标签的文本值
@Test
public void getText() throws DocumentException {
// 获取Document对象
SAXReader reader = new SAXReader();
Document document = reader.read("./schema/books.xml");// xml文档路径
// 获取根标签
Element root = document.getRootElement();
// 获取根标签的所有子标签
List<Element> books = root.elements();
// 遍历books
for (Element book : books) {
// 获取id属性为11的book标签
if ("1".equals(book.attributeValue("id"))) {// id属性为11
// 获取该标签的所有子标签
List<Element> bookChildren = book.elements();
// 遍历
for (Element child : bookChildren) {
if ("name".equals(child.getName())) {// 标签名为name
System.out.println(child.getText());
}
}
}
}
}</span>
输出内容:
葵花宝典