一、XML常用解析方式:
- DOM
- SAX
<?xml version="1.0" encoding="utf-8?>
<stu id="123">
<name>张三</name>
<age>18</age>
</stu>
DOM(document object model):即文档对象模型。把整个xml全部读到内存中,形成树状结构。整个文档称之为document对象,属性对应Attribute对象,所有元素结点对应Element对象,文本也可以称之为Text对象,以上所有对象都可以称之为Node节点,如果xml特别大,那么将会造成内存溢出。可以对文档进行增删操作。
SAX(Simple API for XML):基于事件驱动,读取一行,解析一行。不会造成内存溢出。不可进行增删,只能查询。
针对上面两种解析方式提供的API
- jaxp :比较繁琐
- jdom
- dom4j :jdom的升级版,使用比较广泛。
二、Dom4j 的基本用法
element.element("stu"); //返回该元素下的第一个stu元素
element.elements(); //返回该元素下的所有子元素。
- 创建SaxReader对象
- 指定解析的xml
- 获取根元素。
- 根据根元素获取子元素或者下面的子孙元素
try {
//1. 创建sax读取对象
SAXReader reader = new SAXReader(); //jdbc -- classloader
//2. 指定解析的xml源
Document document = reader.read(new File("src/xml/stus.xml"));
//3. 得到元素、
//得到根元素
Element rootElement= document.getRootElement();
//获取根元素下面的子元素 age
//rootElement.element("age")
//System.out.println(rootElement.element("stu").element("age").getText());
//获取根元素下面的所有子元素 。 stu元素
List<Element> elements = rootElement.elements();
//遍历所有的stu元素
for (Element element : elements) {
//获取stu元素下面的name元素
String name = element.element("name").getText();
String age = element.element("age").getText();
String address = element.element("address").getText();
System.out.println("name="+name+"==age+"+age+"==address="+address);
}
} catch (Exception e) {
e.printStackTrace();
}
三、Dom4j 的 Xpath使用
dom4j里面支持Xpath的写法。 xpath其实是xml的路径语言,支持我们在解析xml的时候,能够快速的定位到具体的某一个元素。
- 添加jar包依赖 :jaxen-1.1-beta-6.jar
- 在查找指定节点的时候,根据XPath语法规则来查找
- 后续的代码与以前的解析代码一样。
//要想使用Xpath, 还得添加支持的jar 获取的是第一个 只返回一个。
Element nameElement = (Element) rootElement.selectSingleNode("//name");
System.out.println(nameElement.getText());
System.out.println("----------------");
//获取文档里面的所有name元素
List<Element> list = rootElement.selectNodes("//name");
for (Element element : list) {
System.out.println(element.getText());
}