在python中评估Xpath2.0

Posted

技术标签:

【中文标题】在python中评估Xpath2.0【英文标题】:Evaluate Xpath2.0 in python 【发布时间】:2019-03-13 10:20:33 【问题描述】:

我有一个如下所示的 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 library 转换为 python 仍然可以将 xpath2.0 表达式拆分为词法分析器,但不能将其完全转换为 python。

如果有的话,给我推荐一些用于 python 的 Xpath2.0 库。 还有如何解释 XPath 表达式并显示表达式的哪一部分起作用?

【问题讨论】:

lxml.de/xpathxslt.html#xpath 是一个很好的库,或者只是docs.python.org/3.7/library/… 是的,我试过了。它仅支持 xpath1.0 表达式,我对其进行了扩展以支持 xpath 2.0 函数,例如替换、标记化,但无法评估 'if' 和 'for' 表达式。 Saxon 9.8 支持 XPath 3 和 2,并且可以在 saxonica.com/download/c.xml 获得 Saxon/C 版本,因此其他 Python 库是用 C 编写的,因此可以基于Saxon/C,至少对于 XPath 2/3 评估,不确定您将深入研究 XPath 实现。 【参考方案1】:

如您所知,lxml,Python 支持 XML/XPath 的基石,仅提供功能

XPath 1.0、XSLT 1.0 和通过 libxml2 和 libxslt 的 EXSLT 扩展

我们还有一些选择。

我最近研究了这个主题(特别是 Python 的 XQuery 支持)。 有关XML Query Implementations 的参考列表,请参阅 W3C。

    带有 XPath 2+ 和 EXSLT 扩展的 Python 模块(例如,EXSLT 用于正则表达式 matching)some modules on PiPy 部分提供 XPath 2.0+ 功能。

    有一些 OSS XML/NoSQL-DBMS 实现了 XPath/XQuery 2.0 功能,例如

    Zorba,XQuery 1.0/2.0 的开源可移植可嵌入 C++ 实现,具有 Python 绑定(这 question 有一些指针), 以及 Sedna 和一些商业 DBMS。根据您的项目,这可能是一个不错的选择。

    我相信 Saxon/C (by Michael Kay) 与 Cython 是最有前途的道路。 在使用Boost.Python 和pysaxon 之前尝试过。更新:同时发布了Saxon/C extension for Python 3。

    您可以使用子进程调用 CLI XML 处理器(建议 here),例如subprocess.call(["saxon", "-o:output.xml", "-s:file.xml", "file.xslt"])

    另一种选择是将XSLT/XPath/XQuery 与撒克逊语和/或Jython 中的其他Java XML classes 一起使用。

    1234563 )。

仍然有些令人失望,尤其是对于像 Python 这样的大型语言。

【讨论】:

【参考方案2】:

正如 Martin 所说,我们有一个用于 C/C++/php 语言的 Saxon 产品,称为 Saxon/C,现在已经推出了几年。我们一直看到用户对将 Saxon/C 与 Python 结合使用感兴趣。

一位用户已成功使用 Boost.Python 与我们的 C++ 库进行交互。 另一个用户以不同的方式完成了接口:https://github.com/ajelenak/pysaxon

我们希望为 Python 提供官方 Saxon/C 接口。

【讨论】:

一个用于 Python 的官方 Saxon/C 接口会很棒。 我们现在为 Python3 发布了 Saxon/C 扩展:saxonica.com/saxon-c/index.xml

以上是关于在python中评估Xpath2.0的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中动态评估简单的布尔逻辑

在PYTHON中使用TMTOOLKIT进行主题模型LDA评估

在python中评估Xpath2.0

游戏循环中函数输出的python范围不评估

在 Python 中评估单词字符串的辅音/元音组成

如何在 python 中为 xgboost 编写自定义评估指标?