假设我有一个像/Results/Bill[Item[id]]/id
这样的XPath字符串。我需要将命名空间信息添加到路径中,以便将路径转换为:/*:Results/*:Bill[*:Item[*:id]]/*:id
。
我正在考虑使用正则表达式执行此操作,例如“prepend”*:“对于任何前面没有其他字母数字字符的字母数字字符”。但是,我没有很多正则表达式的知识,也不知道这对应的正则表达式(一旦我有正则表达式,我打算使用Java的replaceAll()
函数)。此外,任何人都可以想到一个反例,我的想法不起作用?我将使用简单谓词对XPath字符串执行替换操作(即方括号之间没有and
,or
等。
答案 0 :(得分:1)
您可能会获得一个正则表达式解决方案来处理某种XPath表达式的子集,但是您永远不会让它与所有XPath表达式一起使用。 XPath语法太复杂了。
(初始提案中最明显的错误是它在count(..)
等变量名称,parent::*
等函数名称和@code
或{{1}}等轴名称失败。您可以通过检查符号之前或之后的相关标点来解决这个问题。检查注释或字符串文字中的文本有点棘手。但是区分" div"作为元素名称来自" div&# 34;作为运算符超出了正则表达式方法可以做的事情:它需要一个完整的上下文相关解析器。)
更好的建议:使用一个工具为您提供XPath表达式的解析树,修改该解析树,然后将修改后的树重新序列化为XPath语法。
例如,查看可以使用Gunther Rademacher的Rex工具或W3C XQuery解析器小程序(可以通过谷歌轻松找到)完成的任务。