package com.powernode.xml.test;
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.lang.invoke.VarHandle;
import java.util.List;
public class ParseXMLByDom4jTest
{
@Test
public void TestParseSqlMapperXML() throws DocumentException
{
SAXReader saxReader = new SAXReader();
//把我们解析到的xml文件名字传过来给它创建流
InputStream stream = ClassLoader.getSystemClassLoader().getResourceAsStream("CarMapper.xml");
//创建一个XML的Document对象
Document document = saxReader.read(stream);
//获取根节点的相关信息
Element rootElement = document.getRootElement();
// String xpath = "mapper";
// Element e = (Element) document.selectSingleNode(xpath);
// System.out.println(e.attributeValue("namespace"));
// System.out.println(e.getName());
//拿到命名空间
String namespace = rootElement.attributeValue("namespace");
System.out.println(namespace);
List<Element> elements = rootElement.elements();
//把子节点都遍历一下,获取SQL语句的mapper信息
elements.forEach(ele ->
{
Element element = (Element) ele;
//获取SQL的ID
String id = element.attributeValue("id");
System.out.println(id);
//没有这个属性会返回一个null字符串
//获取SQL对应的POJO类
String resultType = element.attributeValue("resultType");
System.out.println(resultType);
//获取标签中的SQL语句
//获取标签中的文本内容,同时去除前后空白
String sql = element.getTextTrim();
System.out.println(sql);
//解析完成
//mybatis封装了JDBC,要执行带有?的SQL语句
sql = sql.replaceAll("#\\{[0-9A-Za-z_$]*}","?");
System.out.println(sql);
});
}
@Test
public void TestParseMybatisConfigXML() throws DocumentException
{
//创建SAXReader对象
SAXReader reader = new SAXReader();
//读XML文件,我们传给它一个文件流,他会给我们创建一个文档对象Document
InputStream resourceAsStream = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");
Document mybatisXML = reader.read(resourceAsStream);
// System.out.println(mybatisXML.toString());
//获取文档中的根标签,
Element rootElement = mybatisXML.getRootElement();
String rootEleName = rootElement.getName();
System.out.println("根标签名字:" + rootElement.getName());
//获取default默认的环境ID
//里面/代表根,这个写法代表从跟下开始找configuration标签
//然后找configuration下的environments子标签
String xpath = "/configuration/environments";//Xpath是做标签的路径匹配的,能够让我们快速定位XML文件中的元素
Element environments = (Element)mybatisXML.selectSingleNode(xpath);
//因为Element是Node的子类,方法更多,使用更便捷,所以我们在这里强转成子类对象
// System.out.println(environments);
String defaultName = environments.attributeValue("default");
System.out.println("默认环境的ID" + defaultName);
//我们要获取具体的环境environment
xpath = "/configuration/environments/environment[@id='"+ defaultName +"']";
Element environment = (Element)mybatisXML.selectSingleNode(xpath);
//获取environment下的transactionManager节点
Element transactionManager = environment.element("transactionManager");
// 获取事务管理器的类型
String transactionType = transactionManager.attributeValue("type");
System.out.println("事务管理器类型" + transactionType);
// 获取数据源的类型
Element dataSource = environment.element("dataSource");
String dataSourceType = dataSource.attributeValue("type");
// System.out.println(dataSourceType);
//获取dataSource节点下的所有子节点
List<Element> propertyElts = dataSource.elements();
propertyElts.forEach(property ->
{
String name = property.attributeValue("name");
String value = property.attributeValue("value");
System.out.println("类型名" + name);
System.out.println("值" + value);
});
//获取所有的Mapper标签
xpath = "//mapper";
//当不想从根开始获取,想从任意位置获取某个标签就需要Xpath
//使用两个斜杠就表示不是从根开始
List<Node> mappers = mybatisXML.selectNodes(xpath);
//遍历所有的Mapper
mappers.forEach(mapper ->
{
Element mapperEle = (Element) mapper;
String resource = mapperEle.attributeValue("resource");
System.out.println("源文件" + resource);
});
}
}
package com.powernode.xml.test;
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.lang.invoke.VarHandle;
import java.util.List;
public class ParseXMLByDom4jTest
{
@Test
public void TestParseSqlMapperXML() throws DocumentException
{
SAXReader saxReader = new SAXReader();
//把我们解析到的xml文件名字传过来给它创建流
InputStream stream = ClassLoader.getSystemClassLoader().getResourceAsStream("CarMapper.xml");
//创建一个XML的Document对象
Document document = saxReader.read(stream);
//获取根节点的相关信息
Element rootElement = document.getRootElement();
// String xpath = "mapper";
// Element e = (Element) document.selectSingleNode(xpath);
// System.out.println(e.attributeValue("namespace"));
// System.out.println(e.getName());
//拿到命名空间
String namespace = rootElement.attributeValue("namespace");
System.out.println(namespace);
List<Element> elements = rootElement.elements();
//把子节点都遍历一下,获取SQL语句的mapper信息
elements.forEach(ele ->
{
Element element = (Element) ele;
//获取SQL的ID
String id = element.attributeValue("id");
System.out.println(id);
//没有这个属性会返回一个null字符串
//获取SQL对应的POJO类
String resultType = element.attributeValue("resultType");
System.out.println(resultType);
//获取标签中的SQL语句
//获取标签中的文本内容,同时去除前后空白
String sql = element.getTextTrim();
System.out.println(sql);
//解析完成
//mybatis封装了JDBC,要执行带有?的SQL语句
sql = sql.replaceAll("#\\{[0-9A-Za-z_$]*}","?");
System.out.println(sql);
});
}
@Test
public void TestParseMybatisConfigXML() throws DocumentException
{
//创建SAXReader对象
SAXReader reader = new SAXReader();
//读XML文件,我们传给它一个文件流,他会给我们创建一个文档对象Document
InputStream resourceAsStream = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");
Document mybatisXML = reader.read(resourceAsStream);
// System.out.println(mybatisXML.toString());
//获取文档中的根标签,
Element rootElement = mybatisXML.getRootElement();
String rootEleName = rootElement.getName();
System.out.println("根标签名字:" + rootElement.getName());
//获取default默认的环境ID
//里面/代表根,这个写法代表从跟下开始找configuration标签
//然后找configuration下的environments子标签
String xpath = "/configuration/environments";//Xpath是做标签的路径匹配的,能够让我们快速定位XML文件中的元素
Element environments = (Element)mybatisXML.selectSingleNode(xpath);
//因为Element是Node的子类,方法更多,使用更便捷,所以我们在这里强转成子类对象
// System.out.println(environments);
String defaultName = environments.attributeValue("default");
System.out.println("默认环境的ID" + defaultName);
//我们要获取具体的环境environment
xpath = "/configuration/environments/environment[@id='"+ defaultName +"']";
Element environment = (Element)mybatisXML.selectSingleNode(xpath);
//获取environment下的transactionManager节点
Element transactionManager = environment.element("transactionManager");
// 获取事务管理器的类型
String transactionType = transactionManager.attributeValue("type");
System.out.println("事务管理器类型" + transactionType);
// 获取数据源的类型
Element dataSource = environment.element("dataSource");
String dataSourceType = dataSource.attributeValue("type");
// System.out.println(dataSourceType);
//获取dataSource节点下的所有子节点
List<Element> propertyElts = dataSource.elements();
propertyElts.forEach(property ->
{
String name = property.attributeValue("name");
String value = property.attributeValue("value");
System.out.println("类型名" + name);
System.out.println("值" + value);
});
//获取所有的Mapper标签
xpath = "//mapper";
//当不想从根开始获取,想从任意位置获取某个标签就需要Xpath
//使用两个斜杠就表示不是从根开始
List<Node> mappers = mybatisXML.selectNodes(xpath);
//遍历所有的Mapper
mappers.forEach(mapper ->
{
Element mapperEle = (Element) mapper;
String resource = mapperEle.attributeValue("resource");
System.out.println("源文件" + resource);
});
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.powernode</groupId>
<artifactId>parse-xml-by-Dom4J</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<!-- Dom4J的依赖引入-->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
<!-- jaxen依赖-->
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.powernode</groupId>
<artifactId>parse-xml-by-Dom4J</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<!-- Dom4J的依赖引入-->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
<!-- jaxen依赖-->
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>