你的XPath语句并不完全正确.这是我认为你想要的:
>>> DOC = """
... Espresso
... 2.0
... """
>>>
>>> import lxml.etree
>>> tree = lxml.etree.XML(DOC)
>>> matches = tree.xpath('//name[text()="Espresso"]')
然后在匹配后追加元素:
>>> for e in matches:
... sibling = lxml.etree.Element("url")
... sibling.text = "www.espresso.com"
... e.addnext(sibling)
>>> print lxml.etree.tostring(tree)
Espressowww.espresso.com
2.0
编辑:
由于您的文档具有命名空间,因此您希望将命名空间映射传递给XPath函数,并在标记名称前加上命名空间前缀,如下所示:
>>> nsmap = {'phylo': 'http://www.phyloxml.org'}
>>> tree.xpath('//phylo:name[text()="Espresso"]', namespaces=nsmap)
[]