我需要在Python中解析(不评估)Xpath表达式来改变它们,例如我有像
这样的表达方式//div[...whatever...]//some-other-node...
我需要将它们更改为(例如):
/changed-node[@attr='value' and ...whatever...]/another-changed-node[@attr='value' ...
在我看来,我需要将原始表达式拆分为步骤,将步骤拆分为轴+节点和谓词。是否有一些我可以使用的工具,或者有没有一个很好的简单方法可以做到这一点?
问题是,我无法确定原始表达的谓词是否包含[@id='some/value/with/slashes']
之类的内容,因此我无法用天真的正则表达式解析它们。
答案 0 :(得分:1)
您可以使用Gunther Rademacher的REx解析器生成器。请参阅http://www.bottlecaps.de/rex/这将为来自合适BNF的任何语法生成解析器,并且可以使用适用于各种XPath版本的BNF。 REx是一种极好的技术,只有极差的文档才能破坏它。它可以生成多种语言的解析器,包括Javascript,XQuery和XSLT。它在Saxon-JS产品中用于解析浏览器中的动态XPath表达式。
另一种方法是使用W3C提供的XQuery到XQueryX转换器(XPath是XQuery的一个子集,因此它们也将处理XPath。这些以XML格式表示语法树)。