字符串值提取工具-08-java 执行 xml 解析, xpath

ops/2024/10/11 13:28:15/

值提取系列

字符串值提取工具-01-概览

字符串值提取工具-02-java 调用 js

字符串值提取工具-03-java 调用 groovy

字符串值提取工具-04-java 调用 java? Janino 编译工具

字符串值提取工具-05-java 调用 shell

字符串值提取工具-06-java 调用 python

字符串值提取工具-07-java 调用 go

字符串值提取工具-08-java 通过 xml-path 解析 xml

字符串值提取工具-09-java 执行 json 解析, json-path

字符串值提取工具-10-java 执行表达式引擎

场景

我们希望通过 java 执行 xml-path 解析 xml。

基础支持

XPath XML 文档中查找信息的语言

核心实现

代码

java">/**** @since 0.4.0*/
public class ValueExtractionXmlPath extends AbstractValueExtractionAdaptor<Document> {// 创建 XPath 对象private final XPathFactory xPathFactory = XPathFactory.newInstance();private final XPath xpath = xPathFactory.newXPath();@Overrideprotected Document prepare(ValueExtractionContext context) {try {final String xml = (String) context.getDataMap().get("xml");// 将 XML 字符串解析为 Document 对象DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.parse(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)));return document;} catch (ParserConfigurationException e) {throw new RuntimeException(e);} catch (SAXException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}@Overrideprotected Object evaluate(Document prepareObject, String script, ValueExtractionContext context) {try {// 编译并执行 XPath 表达式XPathExpression expr = xpath.compile(script);return expr.evaluate(prepareObject);} catch (XPathExpressionException e) {throw new RuntimeException(e);}}}

测试代码

java">@Test
public void test() {String xml = "        <company>\n" +"            <employee>\n" +"                <name>John Doe</name>\n" +"                <position>Software Engineer</position>\n" +"                <salary>75000</salary>\n" +"            </employee>\n" +"            <employee>\n" +"                <name>Jane Smith</name>\n" +"                <position>Project Manager</position>\n" +"                <salary>85000</salary>\n" +"            </employee>\n" +"        </company>";// 测试 getValueByXPath 方法String script = "//employee[1]/name/text()";// 创建绑定并设置参数Map<String, Object> bindings = new HashMap<>();bindings.put("xml", xml);String result = ValueExtractionBs.newInstance().scripts(Arrays.asList(script)).valueExtraction(ValueExtractions.xmlPath()).dataMap(bindings).extract().toString();Assert.assertEquals("{//employee[1]/name/text()=John Doe}", result);
}

http://www.ppmy.cn/ops/95998.html

相关文章

Go Kafka 操作详解

Go Kafka 操作详解 引言 Apache Kafka 是一个分布式流处理平台&#xff0c;广泛应用于构建实时数据管道和流应用程序。在 Go 语言中&#xff0c;使用 github.com/IBM/sarama 库可以方便地与 Kafka 进行交互。本文将详细介绍如何使用 Sarama 库在 Go 中实现 Kafka 的生产者和消…

ComfyUI中,“鼠标忽然不太好用了”的解决方案---新版本偶遇bug

&#x1f387;背景 这是个很奇怪的界面bug。 最近几天感觉Comfyui的界面操作不好用了&#xff0c;就是鼠标移动到一个节点上&#xff0c;如果想要缩放&#xff0c;按道理应该是在1的位置&#xff0c;但是需要移动到2的位置才能触发缩放的操作。 节点连线的时候&#xff0c;线…

stm32单片机学习 - 参考手册和数据手册

参考手册和数据手册 在学习和应用的时候&#xff0c;有两个官方资料文档经常会用到&#xff0c;一个是参考手册&#xff08;Reference mannual&#xff09;&#xff0c;另外一个是数据手册&#xff08;Data Sheet&#xff09;。一句话概括:数据手册主要用于芯片选型和设计原理…

Facebook的区块链技术:提升数据安全与隐私保护

去中心化的优势 随着数字化时代的快速发展&#xff0c;数据安全和隐私保护已成为全球范围内备受关注的话题。Facebook作为全球最大的社交平台之一&#xff0c;正在积极探索如何通过区块链技术来提升数据的安全性和用户的隐私保护。区块链技术以其去中心化、不可篡改和透明的特…

基于WEB的旅游推荐系统设计与实现

TOC springboot280基于WEB的旅游推荐系统设计与实现 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔…

洛谷 P6280 [USACO20OPEN] Exercise G

题目来源于&#xff1a;洛谷 题目本质&#xff1a;dp&#xff0c;素数筛法&#xff0c;质数 本题与P4161基本一模一样 首先&#xff0c;分析题目发现&#xff0c;某个排列的需要进行恰好 K 步变回原样&#xff0c;这个时候K的值就是这个排序中各个环的长的的最小公倍数(lcm)。…

RCE绕过练习

一.了解eval与assert eval与assert区别_eval assert-CSDN博客https://blog.csdn.net/qq_53568983/article/details/129782507 看了php官方文档,assert中提到的许多名词不明白,转而搜索文章,这篇是解释的是最直白的 其中提到eval不是一个函数,是语言构造器,不能被可变函数调用…

git rebase 重建清爽的历史提交

前言 在代码评审时遇到分支上有多个commit信息&#xff0c;对于评审者来说是非常头疼的&#xff0c;因为太混乱了。遇到这样的情况&#xff0c;就需要让开发人员把commit压缩一下&#xff0c;简单来说就是将多个commit合并为一个&#xff0c;这样看起来就比较整洁了&#xff0…