2017-06-23 31 views
1

我遇到命令查找问题,它不工作。但是,理论上它应该是有效的。lxml tree.find无法正常工作

比方说,我有这样的XML文件:

<?xml version="1.0"> 
<pxml name="es"> 
    things here 
</pxml 

我想找到的元素PXML添加有一个属性。所以我用这个代码:

from lxml import etree as et 
lang = 'de' 
tree = et.parse("file.xml") 
root = tree.getroot() 
txml_element = root.find('//pxml') 
txml_element.attrib['language'] = lang 

我收到以下错误信息:

SyntaxError: cannout use absolute path on element 

另外,如果我不这样做的tree.getroot我用的是发现在树上,我总是无元素。我错过了什么?

我不明白为什么我收到此消息错误。如果只使用root.find('pxml'),它将返回None。

然而,使用XPath我得到的元素的列表,它的工作原理:

lang = 'de' 
tree = et.parse("file.xml") 
root = tree.getroot() 
txml_elements = root.xpath('//pxml') 
for element in txml_elements: 
    element.attrib['language'] = lang 
    print(element.attrib) 
#print (et.tostring(tree)) 

回答

1

尝试使用点:

root.find('.') 

如果您只需要PXML元素,检查标签

txml_element.tag 

https://repl.it/IzNt/2

+1

谢谢你:)它在这里工作。但是,如果我需要查找树中间的元素,我将继续遇到同样的问题,因此无法使用查找,因为它返回None或错误提及的错误。 – TMikonos

+0

U可以通过名称查找子元素 - root.find('childnode') https://repl.it/IzNt/4 – hemn