我有一个如下所示的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'表达式可以嵌套for,for循环和xpath2.0函数。
我找不到用于python的任何xpath2.0库。因此,我尝试将Js library转换为python,但仍然可以将xpath2.0表达式拆分为词法分析器,但无法将其完全转换为python。
建议我为python使用一些Xpath2.0库(如果有)。 还有如何解释XPath表达式并显示该表达式的哪个部分起作用?
答案 0 :(得分:3)
您已经知道,lxml是Python XML / XPath支持的基石,仅功能
通过libxml2和libxslt的XPath 1.0,XSLT 1.0和EXSLT扩展
我们还有一些选择。
我最近研究了这个主题(特别是Python的XQuery支持)。
有关XML Query Implementations的参考列表,请参见W3C。
具有XPath 2+和EXSLT扩展的Python模块(例如,用于正则表达式EXSLT的match)
有some modules on PiPy部分提供XPath 2.0+功能。
有一些实现XPath / XQuery 2.0功能的OSS XML / NoSQL-DBMS,例如
我相信(Saxon/C的Michael Kay和Cython是最有前途的道路。之前曾在pysaxon尝试过。
您可以使用子进程来调用CLI XML处理器(如建议的here),例如subprocess.call(["saxon", "-o:output.xml", "-s:file.xml", "file.xslt"])
另一种选择是将XSLT / XPath / XQuery与Java XML classes中的saxon和/或其他Jython一起使用。
最后,您可以设置一个Web服务,以Java,.NET等语言为您完成艰苦的工作,并附带适当的XPath 3+支持(也由Kay {{3 }}。
还是有些令人失望,尤其是对于像Python这样的大型语言。
答案 1 :(得分:1)
正如Martin所提到的,我们有一个用于C / C ++ / PHP语言的Saxon产品,称为Saxon / C,已经推出了几年。我们一直在看到用户对将Saxon / C与Python结合使用感兴趣。
一个用户已经成功使用Boost.Python与我们的C ++库进行交互。 另一位用户以不同的方式完成了接口操作:https://github.com/ajelenak/pysaxon
我们希望为Python提供正式的Saxon / C接口。