哪些库支持XPath?是否有完整的实现?该库如何使用?它的网站在哪里?
哪些库支持XPath?是否有完整的实现?该库如何使用?它的网站在哪里?
libxml2具有以下优点:
缺点包括:
如果您只需要进行简单的路径选择,请使用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
from xml.etree.ElementTree import ElementTree
。 - Ben Pagexml
库,应该怎么做呢? - Eric Dandimport xml.etree.ElementTree as ET
root = ET.parse(filename)
result = ''
for elem in root.findall('.//child/grandchild'):
# How to make decisions based on attributes:
if elem.attrib.get('name') == 'foo':
result = elem.text
break
使用LXML。 LXML充分利用libxml2和libxslt的强大功能,并将它们包装在比那些库本地Python绑定更“Pythonic”的绑定中。因此,它获得了完整的XPath 1.0实现。原生的ElemenTree支持XPath的有限子集,虽然它可能已经足够满足您的需求。
另一个选择是py-dom-xpath,它可以与minidom无缝配合,并且是纯Python编写的,因此可以在appengine上运行。
import xpath
xpath.find('//item', doc)
find
函数中的context
参数允许你将另一个xpath结果作为新的搜索上下文使用。 - Ben你可以使用:
PyXML:
from xml.dom.ext.reader import Sax2
from xml import xpath
doc = Sax2.FromXmlFile('foo.xml').documentElement
for url in xpath.Evaluate('//@Url', doc):
print url.value
libxml2:
import libxml2
doc = libxml2.parseFile('foo.xml')
for url in doc.xpathEval('//@Url'):
print url.content
from xml.dom.ext.reader import Sax2
得到了ImportError: No module named ext
的错误提示。 - Aminah Nuraini您可以使用 soupparser
来自 lxml
from lxml.html.soupparser import fromstring
tree = fromstring("<a>Find me!</a>")
print tree.xpath("//a/text()")
parsel
。>>> from parsel import Selector
>>> sel = Selector(text=u"""<html>
<body>
<h1>Hello, Parsel!</h1>
<ul>
<li><a href="http://example.com">Link 1</a></li>
<li><a href="http://scrapy.org">Link 2</a></li>
</ul
</body>
</html>""")
>>>
>>> sel.css('h1::text').extract_first()
'Hello, Parsel!'
>>> sel.xpath('//h1/text()').extract_first()
'Hello, Parsel!'
//li/a/text()
。 - eLRuLLelementtree的最新版本支持XPath非常好。虽然我不是XPath专家,但我可以肯定地说,它的实现已经满足了我在Python中工作时的大部分需求。我还使用过lxml和PyXML,但我发现etree很好,因为它是一个标准模块。
注意:我后来发现lxml,对我来说,它绝对是Python中最好的XML库。它也很好地支持XPath(虽然可能没有完全实现)。