当前位置: 首页 > news >正文

XPathParser类

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)

  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文件中的变量值

        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);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【React】详解如何获取 DOM 元素
  • 【图解网络】学习记录
  • 每日OJ_牛客CM26 二进制插入
  • 【模型】LightGBM
  • OCC BRepOffsetAPI_ThruSections使用
  • UVM_ERROR: SEQREQZMB解决方案
  • <设计模式> 工厂模式
  • 【排序算法(二)】——冒泡排序、快速排序和归并排序—>深层解析
  • Photos框架 - 自定义媒体选择器(UI列表)
  • 您需要了解的有关 5G 的一切。
  • 大数据之Oracle同步Doris数据不一致问题
  • C#用Aspose.Cells导出Excel,.NET导出Excel
  • Dockerfile自定义镜像
  • 搜索引擎项目(四)
  • ubuntu20.04.6 安装Skywalking 10.0.1
  • create-react-app做的留言板
  • E-HPC支持多队列管理和自动伸缩
  • FineReport中如何实现自动滚屏效果
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • iOS | NSProxy
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • java取消线程实例
  • JS学习笔记——闭包
  • Vue 2.3、2.4 知识点小结
  • 从零开始的无人驾驶 1
  • 给新手的新浪微博 SDK 集成教程【一】
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 基于web的全景—— Pannellum小试
  • 简单基于spring的redis配置(单机和集群模式)
  • 码农张的Bug人生 - 初来乍到
  • 免费小说阅读小程序
  • 那些被忽略的 JavaScript 数组方法细节
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 使用agvtool更改app version/build
  • -- 数据结构 顺序表 --Java
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​TypeScript都不会用,也敢说会前端?
  • ​什么是bug?bug的源头在哪里?
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #HarmonyOS:Web组件的使用
  • (16)Reactor的测试——响应式Spring的道法术器
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (LeetCode 49)Anagrams
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (python)数据结构---字典
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)换源+apt-get基础配置+搜狗拼音
  • (强烈推荐)移动端音视频从零到上手(下)
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (转)JAVA中的堆栈
  • (转载)OpenStack Hacker养成指南
  • .gitignore文件忽略的内容不生效问题解决