python - 在python中评估Xpath2.0
问题描述
我有一个 XPath 表达式,如下所示。
if(replace(//p[1]/text(),'H','h') = 'hello') then //p[1]/text() else if(//p[1]/text() = 'world') then //p[2]/text() else 'notFound'
我想显示哪个“if”表达式有效。
e.g //p[1]/text() if first 'if' expression worked.
'If' 表达式可以嵌套 if、for 循环和 xpath2.0 函数。
我找不到任何用于 python 的 xpath2.0 库。因此,我尝试将此 Js库转换为 python,但我仍然可以将 xpath2.0 表达式拆分为词法分析器,但无法将其完全转换为 python。
建议我一些用于 python 的 Xpath2.0 库,如果有的话。另外如何解释 XPath 表达式并显示表达式的哪一部分有效?
解决方案
如您所知,lxml是 Python 的 XML/XPath 支持的基石,仅具有功能
XPath 1.0、XSLT 1.0 和通过 libxml2 和 libxslt 的 EXSLT 扩展
我们还有一些选择。
我最近研究了这个主题(特别是 Python 的 XQuery 支持)。有关XML 查询实现
的参考列表,请参阅 W3C 。
带有 XPath 2+ 和 EXSLT 扩展的 Python 模块(例如,用于正则表达式匹配的EXSLT)PiPy 上 有一些模块部分提供 XPath 2.0+ 功能。
有一些 OSS XML/NoSQL-DBMS 实现了 XPath/XQuery 2.0 功能,例如
我相信带有 Cython 的Saxon/C (by Michael Kay ) 是最有前途的道路。
在使用Boost.Python和在pysaxon之前尝试过它。
更新:同时发布了 Python 3 的 Saxon/C 扩展。您可以使用子进程调用 CLI XML 处理器(如此处建议),例如
subprocess.call(["saxon", "-o:output.xml", "-s:file.xml", "file.xslt"])
另一种选择是将XSLT /XPath/XQuery 与 saxon 和/或Jython中的其他Java XML 类一起使用。
最后,您可以设置一个 Web 服务,使用 Java、.NET 等语言为您完成繁重的工作,并附带适当的 XPath 3+ 支持(Kay在此处也建议)。
仍然有些令人失望,尤其是对于像 Python 这样的大型语言。
推荐阅读
- objective-c - 在块中使用弱 obj 时崩溃
- model-view-controller - 渲染局部视图而不刷新MVC中的主视图
- redis - redis 客户端列表重新运行“cmd=NULL”
- android - 提取文本视图中显示的文本行
- swift - 如何在 Xcode (swift) 中的文本上自动滚动到右侧?
- javascript - 将参数从 StackNavigator 传递到 TabNavigator
- android - 在 Android 模拟器上显示没有屏幕的空活动
- ejabberd - ejabberd MUC-Sub 麻烦
- android - 本地类的 Proguard 规则
- java - JcaPEMWriter 可以生成 PKCS#8 输出吗?