在 python 中评估 Xpath2.0

Er *_*Ram 10 python xpath xslt-2.0 xpath-2.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'
Run Code Online (Sandbox Code Playgroud)

我想显示哪个 'if ' 表达式有效。

e.g //p[1]/text() if first 'if' expression worked.
Run Code Online (Sandbox Code Playgroud)

'If' 表达式可以嵌套 if、for 循环和 xpath2.0 函数。

我找不到任何用于 python 的 xpath2.0 库。因此,我尝试将此 Js转换为 python,但我仍然可以将 xpath2.0 表达式拆分为词法分析器,但无法将其完全转换为 python。

如果有的话,建议我一些用于 python 的 Xpath2.0 库。另外如何解释 XPath 表达式并显示表达式的哪一部分有效?

wp7*_*8de 12

如您所知,lxml是 Python 的 XML/XPath 支持的基石,仅具有

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

我们还有一些选择。

我最近研究了这个话题(特别是 Python 的 XQuery 支持)。
请参阅 W3C 以获取XML 查询实现的参考列表。

  1. 带有 XPath 2+ 和 EXSLT 扩展的 Python 模块(例如,用于正则表达式匹配EXSLTPiPy 上一些模块部分提供 XPath 2.0+ 功能。

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

    • Zorba,XQuery 1.0/2.0 的开源可移植可嵌入 C++ 实现,它具有 Python 绑定(这个问题有一些指针),
    • 以及Sedna和一些商业 DBMS。根据您的项目,这可能是一个不错的选择。
  3. 我相信Saxon/C (by Michael Kay ) 和 Cython 是最有前途的道路。
    在使用Boost.Pythonpysaxon之前尝试过它。
    更新:同时发布了 Python 3 的 Saxon/C 扩展

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

  5. 另一种选择是将XSLT /XPath/XQuery 与Jython 中的saxon 和/或其他Java XML 类一起使用。

  6. 最后,您可以设置一个 Web 服务,用 Java、.NET 等语言为您完成繁重的工作,并提供适当的 XPath 3+ 支持(Kay在这里也建议)。

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