第1章、XML 文件:
1.1什么是 xml 文件
(1) xml 是可扩展标识语言, (Extensible Markup Language)就是开发者在符合
xml 命名规则的基础之上,可以根据自己的需求定义自己的标签;
1.2xml 文件的作用:主要是用来存储数据
1.3解析 xml 文件的方法: DOM、 DOM4J、 SAX等
第2章 Dom4J 解析 xml 文件
2.1导入 Dom4J.jar 包
2.1.1 dom4j-1.6.1.jar
2.2Dom4J 常用的对象:
2.2.1 SAXReader:读取 xml 文件到 Document 树结构文件对象
2.2.2 Document:是一个 xml 文档对象树,类比 Html 文档对象。
2.2.3 Element:元素节点。通过 Document 对象可以查找单个元素
2.3Dom4j 解析步骤:
2.3.1 第一步: 创建解析器
2.3.2 第二步: Document 对象: 通过解析器 read 方法获取
2.3.3 第三步:获取 xml 根节点
2.3.4 第四步:遍历解析子节点
2.4、使用 Dom4j 解析 students.xml 文件
准备 students.xml 文件
<a>
<student>
<name>吴飞</name>
<college>java学院</college>
<telephone>62354666</telephone>
<notes>男,1982年生,硕士,现就读于北京邮电大学</notes>
</student>
<student>
<name>李雪</name>
<college>C++学院</college>
<telephone>62358888</telephone>
<notes>男,1987年生,硕士,现就读于中国农业大学</notes>
</student>
<student>
<name>Jack</name>
<college>PHP学院</college>
<telephone>66666666</telephone>
<notes>我是澳洲人</notes>
</student>
</a>
public class XMLParse {
public static void main(String[] args) throws DocumentException {
try {
// 1.创建解析器
SAXReader saxReader = new SAXReader();
// 2.通过解析器的read方法将配置文件读取到内存中,生成一个Document[org.dom4j]对象树
Document document = saxReader.read("xml/students.xml");
// 3.获取根节点
Element root = document.getRootElement();
// 4.开始遍历root
for (Iterator<Element> iter = root.elementIterator(); iter.hasNext();) {
Element innerElt = iter.next();
for (Iterator<Element> inner = innerElt.elementIterator(); inner.hasNext();) {
Element stuElt = inner.next();
String name = stuElt.getName();
String stuAttrValue = stuElt.getStringValue();
System.out.println("<" + name + "/>"+stuAttrValue+ "<" + name + "/>");
}
System.out.println("--------------------------------------");
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
第3章使用 Dom4j 的 xPath 解析 xml 文件
3.1XPath 语法
3.1.1 官方语法地址: http://www.w3school.com.cn/xpath/index.asp
3.1.2 xpath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着
路径 (path) 或者步 (steps) 来选取的
3.2xpath 语法选取节点
3.2.1 选择节点: XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着
路径或者 step 来选取的。下面列出了最有用的路径表达式:
表达式 | 描述 |
nodename | 选取此节点的所有子节点。 |
/ | 从根节点选取。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 |
. | 选取当前节点。 |
.. | 选取当前节点的父节点。 |
@ | 选取属性。 |
3.3示例一: 获取 sys-config.xml 文件的配置信息
准备工作:
(1) 导入 dom4j-1.6.1.jar 和 jaxen-1.1-beta-7.jar
(2) sys-config.xml 文档
<?xml version="1.0" encoding="UTF-8"?>
<config>
<database-info>
<driver-name>com.mysql.jdbc.Driver</driver-name>
<url>jdbc:mysql://192.168.1.151:3366/bjpowernode</url>
<user>root</user>
<password>123</password>
</database-info>
</config>
public class MyXpathTest {
public static void main(String[] args) {
//Dom4j+xpath
try {
//创建解析器
SAXReader saxReader = new SAXReader();
//通过解析器的read方法将配置文件读取到内存中,生成一个Document[org.dom4j]对象树
Document document = saxReader.read("xml/sys-config.xml");
//获取driver-name节点元素的路径:config -> database-info -> driver-name
//获取driver-name节点元素的xpath路径:/config/database-info/driver-name
String driverNameXpath = "/config/database-info/driver-name";
//获取driver-name节点元素对象
Element driverNameElt = (Element) document.selectSingleNode(driverNameXpath);
//获取driverNameElt节点元素对象的值
String driverName = driverNameElt.getStringValue();
System.out.println(driverName);
//获取url节点元素的路径:config -> database-info -> url
//url节点元素的xpath路径:/config/database-info/url
//url节点元素的xpath路径:config//url
Element urlElt = (Element) document.selectSingleNode("config//url");
String url = urlElt.getStringValue();
System.out.println(url);
//获取user节点元素的路径:config -> database-info -> user
//user节点元素的xpath路径:/config/database-info/user
//user节点元素的xpath路径:config//user
//user节点元素的xpath路径://user
Element userElt = (Element) document.selectObject("//user");
String user = userElt.getText();
System.out.println(user);
//获取password节点元素的文本内容
Element passwordElt =(Element) document.selectObject("//password");
String password = passwordElt.getTextTrim();
System.out.println(password);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3.4示例二:解析 server.xml 文件:获取端口号
准备 server.xml
<?xml version="1.0" encoding="UTF-8"?>
<server>
<service>
<connector port="8080"></connector>
</service>
</server>
public class Serverparser {
public static void main(String[] args) {
//Dom4j+xpath
try {
//创建解析器
SAXReader saxReader = new SAXReader();
//通过解析器的read方法将配置文件读取到内存中,生成一个Document[org.dom4j]对象
Document document = saxReader.read("xml/server.xml");
//获取connector节点元素对象的路径 :server -> service -> connector
//connector节点元素对象的xpath路径:/server/service/connector
//connector节点元素对象的xpath路径:server//connector
//connector节点元素对象的xpath路径://connector
Element connectorElt = (Element) document.selectSingleNode("//connector");
//获取port属性对象
Attribute portAttr = connectorElt.attribute("port");
//获取portAttr属性对象的值
String port = portAttr.getStringValue();
System.out.println(port);
String portStr = connectorElt.attributeValue("port");
System.out.println(portStr);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}