XML之dom4j解析
作者:互联网
简介:
dom4j的解析是从上到下的。
dom4j不是javase的一部分,所以需要导入dom4j的jar包。
首先是进入dom4j下载jar包:
https://dom4j.github.io/
下载完成后在eclipse新建一个lib文件夹:
将下载的jar包复制到lib文件夹中:
复制后右击lib文件夹,选择构建路径(builder-panth),然后点配置构建路径:
然后按照步骤(必须导入类路径):
然后再跟着步骤:
最后应用并关闭就能看到躲了一个引用的库里面有下载的jar包:
dom4j的应用:
首先查看org.dom4j.io下的SAXReader类:
public class SAXReader extends Object
在SAXReader类中有一个方法
从给定的文件中读取一个文档:public Document read(File file) throws DocumentException
返回一个新创建的Document实例对象;
public interface Document extends Branch public interface Branch extends Node
可以发现Document是Node接口的子接口,所以Document实例对象可以使用父接口Node的方法,
在Document中有一个方法:
返回根元素:public Element getRootElement();
在Node中有方法:
返回父节点(不存在则返回空): public Element getParent(); 判断此节点是否支持父节点: public boolean supportsParent(); 设置父节点(如果不支持父节点则无操作): public void setParent(Element parent); 返回节点的文本: public String getText(); 判断此节点是否为只读: public boolean isReadOnly(); 设置文本内容(节点为可写,isReadOnly为false): public void setText(String text);
案例:
用dom4j实现获取xml中节点的文本信息:
新建person.xml文档:
<?xml version="1.0" encoding="UTF-8"?> <person> <p1> <name>zs</name> <age>11</age> </p1> <p1> <name>ls</name> <age>11</age> </p1> </person>
获取person.xml下<name>节点的文本内容:
package dom4jDemo1; import java.io.File; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Dom4jParseXml { public static void main(String[] args) throws Exception{ selectName(); } public static void selectName() throws Exception { // 创建解析器 SAXReader reader = new SAXReader(); // 通过read()方法读取xml Document doc = reader.read("src" + File.separator + "dom4jDemo1" + File.separator + "dom4j1_1.xml"); // 得到根节点 Element rootElement = doc.getRootElement(); // 获取p1节点 List<Element> lists = rootElement.elements("p1"); for (Element element : lists) {
// Element就是p1,有两个p1 // 获取name节点 Element name = element.element("name"); // 获取name节点的文本内容 String text = name.getText(); System.out.println(text); } } }
输出结果:
通过集合的get(int index)获取索引位置的标签,然后获取标签文本内容:
package dom4jDemo1; import java.io.File; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Dom4jParseXml { public static void main(String[] args) throws Exception{ selectName(); } public static void selectName() throws Exception { // 创建解析器 SAXReader reader = new SAXReader(); // 通过read()方法读取xml Document doc = reader.read("src" + File.separator + "dom4jDemo1" + File.separator + "dom4j1_1.xml"); // 得到根节点 Element rootElement = doc.getRootElement(); // 获取p1节点 List<Element> lists = rootElement.elements("p1"); // 通过List中的get()方法获取对应索引位置的元素 System.out.println(lists.get(0).element("age").getText()); } }
输出结果:
为了体现dom4j从上到下解析的过程,新建一个方法进行重复获取:
public static void selectNameF() throws Exception { // 创建解析器 SAXReader reader = new SAXReader(); // 通过read()方法读取xml Document doc = reader.read("src" + File.separator + "dom4jDemo1" + File.separator + "dom4j1_1.xml"); // 得到根节点 Element rootElement = doc.getRootElement(); // 获取p1 Element p1 = rootElement.element("p1"); // 获取p1下的name Element name = p1.element("name"); // 获取name文本 String text1 = name.getText(); // 获取p1 Element p1_2 = rootElement.element("p1"); // 获取p1下的name Element name2 = p1_2.element("name"); // 获取name文本 String text2 = name2.getText(); System.out.println(text1); System.out.println(text2); }
输出结果:
可以发现,在进行重复获取<p1>的时候并不是对第一个<p1>标签进行了两次获取,而是获取一次第一个<p1>标签之后,又向下获取第二个<p1>标签,所以可以得到第一个<name>标签的文本内容和第二个<name>标签的文本内容。
标签:XML,p1,name,dom4j,Element,节点,解析,public 来源: https://www.cnblogs.com/0099-ymsml/p/16062244.html