在python中评估Xpath2.0

问题描述 投票:2回答:2

我有一个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表达式并显示表达式的哪个部分有效?

python xpath xslt-2.0 xpath-2.0
2个回答
3
投票

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

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

我们还有一些选择。

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

  1. 具有XPath 2+和EXSLT扩展的Python模块(例如用于正则表达式EXSLTing的match) 有some modules on PiPy部分提供XPath 2.0+功能。
  2. 有一些OSS XML / NoSQL-DBMS实现XPath / XQuery 2.0功能,例如 Zorba,XQuery 1.0 / 2.0的开源便携式可嵌入C ++实现,具有Python绑定(这个question有一些指针), 以及Sedna和一些商业DBMS。根据您的项目,这可能是一个不错的选择。
  3. 我相信Saxon/C(由Michael Kay)和Cython是最有前途的道路。它曾在pysaxon尝试过。
  4. 您可以使用子进程来调用CLI XML处理器(如建议的here),例如subprocess.call(["saxon", "-o:output.xml", "-s:file.xml", "file.xslt"])
  5. 另一种选择是在XSLT中使用Java XML classes / XPath / XQuery和撒克逊和/或其他Jython
  6. 最后,您可以设置一个Web服务,使用Java,.NET等语言为您完成艰苦的工作,并提供适当的XPath 3+支持(Kay here也建议)。

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


2
投票

正如马丁所提到的,我们有一个用于C / C ++ / PHP语言的Saxon产品,称为Saxon / C,已有几年了。我们一直看到用户对使用Saxon / C和Python感兴趣。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.