如何在 Python 中使用 XPath?

新手上路,请多包涵

支持 XPath 的库有哪些?有完整的实现吗?图书馆是如何使用的?它的网站在哪里?

原文由 yeruham 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 248
1 个回答

libxml2 有很多优点:

  1. 符合 规范
  2. 积极发展和社区参与
  3. 速度。这实际上是一个围绕 C 实现的 python 包装器。
  4. 无处不在。 libxml2 库是普遍存在的,因此经过了良好的测试。

缺点包括:

  1. 符合 规范。这很严格。在其他库中,诸如默认命名空间处理之类的事情更容易。
  2. 使用本机代码。这可能会很痛苦,具体取决于您的应用程序的分布/部署方式。 RPM 可以减轻一些这种痛苦。
  3. 手动资源处理。请注意下面示例中对 freeDoc() 和 xpathFreeContext() 的调用。这不是很 Pythonic。

如果您正在进行简单的路径选择,请坚持使用 ElementTree (包含在 Python 2.5 中)。如果您需要完全符合规范或原始速度并且可以处理本机代码的分发,请使用 libxml2。

libxml2 XPath 使用示例


import libxml2

doc = libxml2.parseFile("tst.xml")
ctxt = doc.xpathNewContext()
res = ctxt.xpathEval("//*")
if len(res) != 2:
    print "xpath query: wrong node set size"
    sys.exit(1)
if res[0].name != "doc" or res[1].name != "foo":
    print "xpath query: wrong node set value"
    sys.exit(1)
doc.freeDoc()
ctxt.xpathFreeContext()

ElementTree XPath 使用示例


from elementtree.ElementTree import ElementTree
mydoc = ElementTree(file='tst.xml')
for e in mydoc.findall('/foo/bar'):
    print e.get('title').text

原文由 Ryan Cox 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题