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

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

值提取系列

字符串值提取工具-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 文档中查找信息的语言

核心实现

代码

/**** @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);}}}

测试代码

@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.mrgr.cn/news/4491.html

相关文章:

  • 从行为面试问题(behavioral questions)看中美程序员差异。
  • 火爆国内外的《黑神话:悟空》,需要什么显卡才能玩?
  • 将所有PPT中的字体颜色白色改成黑色---使用AI提高效率
  • SQL每日一练-0816
  • druid+logback打印sql执行日志
  • 贪心算法总结(4)
  • 产品的需求分析
  • 微软Phi-3.5系列亮相:性能超越Gemini 1.5和GPT-4o
  • redis基于多路复用的I/O模型
  • 分析 Runtime.getRuntime() 执行阻塞原因
  • IDEA 导入 RocketMQ 源码
  • Unity Application.streamingAssetsPath 在不同生命周期函数的不同赋值问题
  • Bootstrap UI 编辑器
  • 《黑神话:悟空》游戏攻略:第一回合打法教程!
  • 全国传统村落空间分布SHP数据分享
  • java mybatis 使用work id
  • 咨询炒白银开户就怕晚了
  • 使用Nexus3为containerd和docker配置镜像代理
  • 【Python机器学习】NLP理论概述
  • http request-01-XMLHttpRequest XHR 标准