解析XML之DOM4j

第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();
        }
        
    }

}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值