dom4j解析XML

dom4j是一套比较简单的XML解析的类库。

dom4j解析SqlMapConfig.xml:

  • 1.创建解析器对象。
SAXReader saxReader = new SAXReader();
  • 2.使用解析器对象读取XML文档生成Document对象。
//获取输入流
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("SqlMapConfig.xml");
//读xml文件,返回document对象,代表整个xml文件
Document document = saxReader.read(is);
  • 3.根据Document对象获取XML的标签信息。

dom4j重要API说明:

  • Element rootElement = document.getRootElement();// 获取XML文件的根标签

  • rootElement.getName();//获取标签的的名字

  • String attributevalue = rootElement.attributeValue(“属性名”);//根据属性名获取本标签的属性值

  • Element element = rootElement.element(“标签名”);//根据标签名获取子标签

  • List elements = rootElement.elements();//获取标签的子标签

  • String text = element.getText();//获取该标签中的数据内容

  • String s = element.elementText(“标签名”);//根据标签名获取子标签中的数据内容

dom4j+XPath解析xml:

XPath官方文档:点我

  • 语法:
    • 绝对路径的方式:以/开头表示绝对路径,绝对路径是从根标签开始的,例如:/标签/子标签/子子标签…
    • 相对路径的方式:相对于当前节点的元素继续查找的节点,不以/开头,…/表示上一个元素
    • 全文搜索的方式:例如//子元素,//子元素//子子元素,//子元素/子子元素。//表示无论中间有多少层,直接获取符合条件的所有子元素。/表示只找一层。
    • 条件筛选的方式,例如://元素[@attr=‘value’]
//绝对路径的方式,获取users标签下第一个user标签下的username标签
Element username = (Element)document.selectSingleNode("/users/user/username");
//获取username标签的父标签中的salary标签,即获取该username所对应user的salery
Document salary = (Document)username.selectSingleNode("../salary");
//全文搜索的方式,获取所有id标签
List<Node> ids = username.selectNodes("//id");
for (Node id : ids) {
	//强转成Element对象后输出每个id标签中的数据内容
	Element idElement = (Element)id;//Element是Node类的子类,方法更多,使用更便捷
	System.out.println(idElement.getText());
}
//获取所有user标签并筛选出user属性id为001的user标签
Element id001 = (Element)document.selectSingleNode("//user[@id='001']");
     

dom4j+XPath实战:

解析Mybatis核心配置文件和Mapper.xml文件。

  • 核心配置文件SqlMapConfig.xml:

DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="jdbc.properties">properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC">transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClassName}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            dataSource>
        environment>
    environments>
    <mappers>
        <mapper resource="StudentMapper.xml">mapper>
    mappers>
configuration>
  • SturentMapper.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="clh">
    <select id="getById" parameterType="Integer" resultType="com.user.pojo.Student">
        Select id,name,email,age
        from Student
        where id = #{id}
    </select>
    <insert id="insert" parameterType="com.user.pojo.Student" >
        insert into student(name,email,age) values(#{name},#{email},#{age})
    </insert>
</mapper>
  • 解析两个XML文件:
package com.user;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

public class ParseXMLTest {
    @Test
    public void testParseStudentMapper() throws Exception {
        //创建SAXReader对象
        SAXReader reader = new SAXReader();
        //获取输入流
        InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("StudentMapper.xml");
        //读xml文件,返回document对象,代表整个xml文件
        Document document = reader.read(is);
        //获取mapper标签
        Element mapper = (Element)document.selectSingleNode("//mapper");
        //获取mapper标签的namespace属性的属性值
        String namespace = mapper.attributeValue("namespace");
        //获取mapper结点下所有子结点
        List<Element> elements = mapper.elements();
        //解析每个sql标签子结点
        for (Element element : elements) {
            //获取id属性值
            String id = element.attributeValue("id");
            //获取parameterType属性值
            String parameterType = element.attributeValue("parameterType");
            //获取resultType属性值,没有这个属性的话会返回null
            String resultType = element.attributeValue("resultType");
            //获取sql标签内的数据
            String sql = element.getText();
            //使用正则表达式将原来SQL:insert into student(name,email,age) values(#{name},#{email},#{age})中的占位符替换成?,方便JDBC预编译
            String newsql = sql.replaceAll("#\\{[0-9a-zA-Z_$]*}","?");
            System.out.println(newsql);
        }
    }

    @Test
    public void testParseSqlMapConfig() throws Exception {
        //创建SAXReader对象
        SAXReader reader = new SAXReader();
        //获取输入流
        InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("SqlMapConfig.xml");
        //读xml文件,返回document对象,代表整个xml文件
        Document document = reader.read(is);
        //获取environments标签
        Element environments = (Element) document.selectSingleNode("//environments");
        //获取environments标签中default属性的属性值
        String delaultEnvironmentId = environments.attributeValue("default");
        //根据environments标签中default属性值匹配对应的environment标签
        Element environment = (Element)document.selectSingleNode("//environment[@id='" + delaultEnvironmentId + "']");
        //获取environment标签下的transactionManager子标签
        Element transactionManager = environment.element("transactionManager");
        //获取transactionManager标签中type属性的值
        String transactionType = transactionManager.attributeValue("type");
        //获取environment标签下的dataSource子标签
        Element dataSource = environment.element("dataSource");
        //获取transactionManager标签中type属性的值
        String dataSourceType = transactionManager.attributeValue("type");
        //获取dataSource标签下所有子标签
        List<Element> properties = dataSource.elements();
        //获取所有property标签的属性值
        for (Element property : properties) {
            String name = property.attributeValue("name");
            String value = property.attributeValue("value");
        }
        //获取mapper标签
        List<Node> mappers = document.selectNodes("//mapper");
        //获取所有mapper标签的属性值
        for (Node mapper : mappers) {
            Element Emapper = (Element)mapper;
            String resource = Emapper.attributeValue("resource");
        }
    }
}

你可能感兴趣的:(XML解析,xml,前端,javascript)