XPathParser类

server/2024/9/22 22:46:32/

XPathParser类是mybatis对 javax.xml.xpath.XPath的包装类。
接下来我们来看下XPathParser类的结构

1、属性

  //  存放读取到的整个XML文档private final Document document;//  是否开启验证private boolean validation;// 自定义的DTD约束文件实体解析器,与validation配合使用private EntityResolver entityResolver;// MyBatis配置文件中的properties节点的信息private Properties variables;//  XPath工具private XPath xpath;

2、构造函数

在这里插入图片描述

 public XPathParser(String xml) {commonConstructor(false, null, null);this.document = createDocument(new InputSource(new StringReader(xml)));}

构造方法包含两部分:

  • 初始化属性
private void commonConstructor(boolean validation, Properties variables, EntityResolver entityResolver) {this.validation = validation;this.entityResolver = entityResolver;this.variables = variables;XPathFactory factory = XPathFactory.newInstance();this.xpath = factory.newXPath();
}
  • 构建XML文档对应的Document
private Document createDocument(InputSource inputSource) {// important: this must only be called AFTER common constructortry {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setValidating(validation);factory.setNamespaceAware(false);factory.setIgnoringComments(true);factory.setIgnoringElementContentWhitespace(false);factory.setCoalescing(false);factory.setExpandEntityReferences(true);DocumentBuilder builder = factory.newDocumentBuilder();builder.setEntityResolver(entityResolver);builder.setErrorHandler(new ErrorHandler() {@Overridepublic void error(SAXParseException exception) throws SAXException {throw exception;}@Overridepublic void fatalError(SAXParseException exception) throws SAXException {throw exception;}@Overridepublic void warning(SAXParseException exception) throws SAXException {}});return builder.parse(inputSource);} catch (Exception e) {throw new BuilderException("Error creating document instance.  Cause: " + e, e);}
}

3、方法

在这里插入图片描述
基本类型的解析方法,最终调用的都是方法 evalString(Object root, String expression)

java">  private Properties variables;private XPath xpath;public String evalString(Object root, String expression) {// 解析结果String result = (String) evaluate(expression, root, XPathConstants.STRING);// 对${}变量从Properties配置文件中进行查找相应的属性值替换,若variables为空或未查找到${}直接返回resultresult = PropertyParser.parse(result, variables);return result;}private Object evaluate(String expression, Object root, QName returnType) {try {// 调用XPath进行解析return xpath.evaluate(expression, root, returnType);} catch (Exception e) {throw new BuilderException("Error evaluating XPath.  Cause: " + e, e);}}

4、总结

可使用XPathParser类来解析自己定义的XML文件,同时也可以仿照mybatis定义自己的Properties文件类替换XML文件中的变量值

java">        String path = "E:\\GitResource\\springboot-bucket\\springboot-mybatis\\src\\main\\resources\\mapper\\20240729.xml";DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();Document document = documentBuilder.parse(path);XPathParser xPathParser = new XPathParser(document,false,null,null);String evalString = xPathParser.evalString("/mapper/sql[1]");System.out.println(evalString);

http://www.ppmy.cn/server/90906.html

相关文章

Android笔试面试题AI答之线程Handler、Thread(1)

答案仅供参考,来自 讯飞星火大模型 目录 1.Dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念?2.简述Handler ?Handler机制是什么?其原理是什么?3.简述使用Handler的时候一般会遇到的问题?4.Android…

网络爬虫必备工具:代理IP科普指南

文章目录 1. 网络爬虫简介1.1 什么是网络爬虫?1.2 网络爬虫的应用领域1.3 网络爬虫面临的主要挑战 2. 代理IP:爬虫的得力助手2.1 代理IP的定义和工作原理2.2 为什么爬虫需要代理IP?2.3 代理IP如何解决爬虫的常见问题? 3. 代理IP的…

动静资源的转发操作

目录 Nginx中的location指令 静态资源的转发 动态资源的转发 注意事项 深入研究 如何在Nginx中实现对特定后缀文件的静态资源进行反向代理? Nginx中location指令的优先级是怎样确定的? 为什么在使用proxy_pass时要区分是否带有斜杠? N…

《古陶瓷有意思》:从文物保护到古陶瓷审美

腰骏驰,文物保护工作者,奥尔梅克海外文物回流俱乐部创始人,北京邢定文物商店总经理,《古陶瓷有意思》作者,古陶瓷学者、资深文物经纪人。参加多次大型窑址、古战场、古代墓葬发掘活动。参与多项省市级文物保护巡视巡察…

1.Spring Boot 简介(Spring MVC+Mybatis-plus)

文章目录 一,Spring Boot 简介二,搭建springboot项目并整合mybatis-plus框架1.pom导依赖2.添加启动项3.配置文件.yml 三,springboot集成 Spring MVC1.springmvc定义2.应用注解 一,Spring Boot 简介 SpringBoot是Spring的子工程(或…

C++【泛型编程】【string类常用接口】学习

目录 泛型编程 推演实例化 显示实例化 类模板 类模板的声明和定义分离 STL string string的构造和拷贝构造 选取特定字符串拷贝 解析: 关于npos的解析 验证 从一个字符串中拷贝前几个字符 解析: 注意: 验证: size…

学习JavaScript第五天

文章目录 1.HTML DOM1.1 表单相关元素① form 元素② 文本输入框类和文本域(input 和 textarea)③ select 元素 1.2 表格相关元素① table 元素② tableRow 元素(tr 元素)③ tableCell 元素 (td 或 th) 1.3…

数据库设计三范式

目录 第一范式 第二范式 第三范式 数据库的设计范式,即数据库设计的原则; 在设计数据库时尽量遵守这三个条件,因为在实际的设计中,根据要求是空间换时间还是时间换空间来遵守范式; 第一范式 每一张表都必须有主键…