如何将lxml xpath函数导入默认命名空间?

2024-09-29 21:50:58 发布

您现在位置:Python中文网/ 问答频道 /正文

这是lxml doc中的一个示例:

>>> regexpNS = "http://exslt.org/regular-expressions"
>>> find = etree.XPath("//*[re:test(., '^abc$', 'i')]",
...                    namespaces={'re':regexpNS})

>>> root = etree.XML("<root><a>aB</a><b>aBc</b></root>")
>>> print(find(root)[0].text)
aBc

我想将re:test()函数导入到默认名称空间,这样就可以不用前缀re:来调用它。我该怎么做?谢谢!在


Tags: orgtestrehttp示例docrootfind
1条回答
网友
1楼 · 发布于 2024-09-29 21:50:58

可以将函数放入空函数命名空间中:

functionNS = etree.FunctionNamespace(None)
functionNS['test'] = lambda context, nodes, *args: print(context, nodes, args)

通过这样做,新的test函数已经注册为空名称空间前缀,这意味着您可以这样使用它:

^{pr2}$

不幸的是,为"{http://exslt.org/regular-expressions}test"调用的function不能从python获得,只能从C实现的lxml扩展中获得,因此不能简单地将其分配给functionNS['test']。在

这意味着您需要在python中重新实现它,以将其分配给空的函数名称空间。。。在

如果不值得麻烦您省去键入三个字符,您可以使用此技巧使名称空间的re前缀变为全局:

etree.FunctionNamespace("http://exslt.org/regular-expressions").prefix = 're'

那么至少不需要为每个xpath表达式传递名称空间dict。在

相关问题 更多 >

    热门问题