使用正则表达式修改XPath字符串,Java

时间:2016-11-23 17:36:15

标签: java regex xpath

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

我正在考虑使用正则表达式执行此操作,例如“prepend”*:“对于任何前面没有其他字母数字字符的字母数字字符”。但是,我没有很多正则表达式的知识,也不知道这对应的正则表达式(一旦我有正则表达式,我打算使用Java的replaceAll()函数)。此外,任何人都可以想到一个反例,我的想法不起作用?我将使用简单谓词对XPath字符串执行替换操作(即方括号之间没有andor等。

1 个答案:

答案 0 :(得分:1)

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

(初始提案中最明显的错误是它在count(..)等变量名称,parent::*等函数名称和@code或{{1}}等轴名称失败。您可以通过检查符号之前或之后的相关标点来解决这个问题。检查注释或字符串文字中的文本有点棘手。但是区分" div"作为元素名称来自" div&# 34;作为运算符超出了正则表达式方法可以做的事情:它需要一个完整的上下文相关解析器。)

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

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