How to find element attribute using lxml
11,721
Solution 1
You need to retrieve the node itself, not its text:
rating = node.xpath('//t:rating', namespaces = {'t':'http://example/namespace'})
print rating[0].attrib['system']
Solution 2
You can also access the attribute using XPath:
system = node.xpath('//t:rating/@system', namespaces = {'t':'http://example/namespace'})
print system[0]
Solution 3
georg's answer assumes all rating
elements will have a system
tag. if that is not necessarily the case, using rating[0].attrib.get('system')
will avoid a KeyError.
Author by
David542
Updated on July 28, 2022Comments
-
David542 almost 2 years
Suppose I have the the following xml:
<package xmlns="http://example/namespace"> <rating system="au-oflc">PG</rating> ... </package>
To get the text of an element in the above, I am doing the following:
from lxml import entree f = open('/Users/David/Desktop/metadata.xml') metadata_contents = f.read() node = etree.fromstring(metadata_contents) rating = node.xpath('//t:rating/text()', namespaces = {'t':'http://example/namespace'}) >>> rating ['PG']
How would I get the value "au-oflc" ?