Get list of XML attribute values in Python Get list of XML attribute values in Python xml xml

Get list of XML attribute values in Python


ElementTree 1.3 (unfortunately not 1.2 which is the one included with Python) supports XPath like this:

import elementtree.ElementTree as xmldef getValues(tree, category):    parent = tree.find(".//parent[@name='%s']" % category)    return [child.get('value') for child in parent]

Then you can do

>>> tree = xml.parse('data.xml')>>> getValues(tree, 'CategoryA')['a1', 'a2', 'a3']>>> getValues(tree, 'CategoryB')['b1', 'b2', 'b3']

lxml.etree (which also provides the ElementTree interface) will also work in the same way.


I'm not really an old hand at Python, but here's an XPath solution using libxml2.

import libxml2DOC = """<elements>    <parent name="CategoryA">        <child value="a1"/>        <child value="a2"/>        <child value="a3"/>    </parent>    <parent name="CategoryB">        <child value="b1"/>        <child value="b2"/>        <child value="b3"/>    </parent></elements>"""doc = libxml2.parseDoc(DOC)def getValues(cat):    return [attr.content for attr in doc.xpathEval("/elements/parent[@name='%s']/child/@value" % (cat))]print getValues("CategoryA")

With result...

['a1', 'a2', 'a3']


You can do this with BeautifulSoup

>>> from BeautifulSoup import BeautifulStoneSoup>>> soup = BeautifulStoneSoup(xml)>>> def getValues(name):. . .      return [child['value'] for child in soup.find('parent', attrs={'name': name}).findAll('child')]

If you're doing work with HTML/XML I would recommend you take a look at BeautifulSoup. It's similar to the DOM tree but contains more functionality.