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.

Share:
11,721
David542
Author by

David542

Updated on July 28, 2022

Comments

  • David542
    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" ?