1、XML简介:
eXtendsible Markup Language 可扩展的标记语言
- 可以用来保存数据
- 可以用来做配置文件
- 数据传输载体
2、Sax解析xml:
所有的解析API都在dom4j这个包中
相关API文档:dom4j API 用于解析XML的java库
解析XML有很多方法,其中最主要的有两种:
- DOM
- SAX
具体介绍和区别如下:
解析的步骤:
- 加载jar包
首先是加载解析XML的库:dom4j-1.6.1.jar
然后和之前使用JDBC的jar包一样,在工程下创建lib文件夹,然后build path,如下图所示:
- 创建SaxReader对象
- 指定解析的xml
- 获取根元素
- 获取子元素(可以链式获取,也可以全部获取放入集合中再遍历)
代码如下:
XmlResolve:
- 获取xml文件中第一个student里面name值
- 两个name值我都要
package cn.nupt;
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class XmlResolve {
public static void main(String[] args) throws DocumentException {
//2. 创建SaxReader对象
SAXReader sax = new SAXReader();
//3. 指定解析的xml
Document document = sax.read(new File("src/XML/demo.xml"));
//4. 获取根元素
Element root = document.getRootElement();
// 第一种方法,利用链式方法
String value = root.element("student").element("name").getStringValue();
System.out.println(value);
System.out.println("------------------------------");
// 第二种方法,利用返回一个Element集合,然后遍历
List<Element> list = root.elements();
for (Element ele : list) {
System.out.println(ele.element("name").getStringValue());
}
}
}
输出:
PizAn
------------------------------
PizAn
吴彦祖
demo.xml
<?xml version="1.0" encoding="UTF-8"?>
<class>
<student>
<name>PizAn</name>
<age>23</age>
<home>江苏</home>
</student>
<student>
<name>吴彦祖</name>
<age>24</age>
<home>香港</home>
</student>
</class>
3、Xpath解析xml:
dom4j里面支持Xpath的写法,Xpath是xml的路径语言,支持我们快速定位到具体的某个元素(有点像用正则表达式快速匹配一些字符,这里的字符就是元素)
相关参考文档:XPathTutorial
步骤:
- 老规矩,先导包:jaxen-1.1-beta-6.jar
- 和前面的Sax一样,先获取根节点
- (1)获取一个元素(2)获取全部元素放在集合里面然后遍历
获取的都是Node,需要向下转型成Element或者指定泛型
代码如下:
package cn.nupt;
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class XmlResolve {
public static void main(String[] args) throws DocumentException {
SAXReader sax = new SAXReader();
Document document = sax.read(new File("src/XML/demo.xml"));
// 2. 和前面的Sax一样,先获取根节点
Element root = document.getRootElement();
// 3. 只拿取一个元素
Element ele = (Element) root.selectSingleNode("//name");
System.out.println(ele.getText());
// 3. 获取全部元素放在集合里面然后遍历
System.out.println("--------------------------");
List<Element> list = root.selectNodes("//name");
for (Element element : list) {
System.out.println(element.getText());
}
}
}
输出:
PizAn
--------------------------
PizAn
吴彦祖