java - 使用正则表达式、Java 修改 XPath 字符串

标签 java regex xpath

假设我有一个 XPath 字符串,例如 /Results/Bill[Item[id]]/id。我需要将命名空间信息添加到路径中,以便路径转换为: /*:Results/*:Bill[*:Item[*:id]]/*:id.

我正在考虑使用正则表达式来执行此操作,例如“在任何前面没有另一个字母数字字符的字母数字字符前添加“*:””。然而,我没有太多的正则表达式知识,也不知道这对应于什么正则表达式(一旦我有了正则表达式,我计划使用Java的replaceAll()函数)。另外,有人能想到我的想法行不通的反例吗?我将仅使用简单谓词(即方括号之间没有 andor 等)对 XPath 字符串执行替换操作。

最佳答案

您可能会得到一个正则表达式解决方案来处理 XPath 表达式的某种子集,但您永远无法让它处理所有 XPath 表达式。 XPath 语法太复杂了。

(您最初的提案中最明显的错误是它在诸如 $var 之类的变量名称、诸如 count(..) 之类的函数名称以及诸如 parent::*@code。您可以通过检查符号之前或之后的相关标点符号来解决这个问题。检查注释或字符串文字内的文本有点棘手。但是区分作为元素名称的“div”和作为运算符的“div”远远超出了正则表达式方法的能力范围:它需要一个完整的上下文敏感解析器。)

更好的建议:使用为您提供 XPath 表达式的解析树的工具,修改该解析树,然后将修改后的树重新序列化为 XPath 语法。

例如,查看使用 Gunther Rademacher 的 Rex 工具或使用 W3C XQuery 解析器小程序(都可以通过 google 轻松找到)可以完成的操作。

关于java - 使用正则表达式、Java 修改 XPath 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40770934/

相关文章:

ruby - 如何使用 ruby​​、xpath、rexml 从子上下文获取节点文本

Java jfreechart 棒散点图?

java - 在客户端 JAVA 中调用 socket.close() 时套接字不关闭服务器端

java - tmp下的spring boot spring.log

PHP正则表达式删除重复单词

java - Mockito 使用正则表达式验证是否使用正确的参数调用了方法

java - Eclipse 插件教程

Java:了解 String replaceAll() 方法

wpf - 在 WPF 中动态更改 XPath 绑定(bind)

javascript - 如何使用 jQuery 和 XPath 抓取网页?