Skip to content
← Back to Community
Searching xml in Python 2.7
Profile icon
franciscoareasareas

Searching an xml in Python

Starting with version 2.7 ElementTree has a better support for XPath queries. XPath is a syntax to enable you to navigate through an xml like SQL is used to search through a database. Both find and findall functions support XPath. The xml below will be used for this example

<Catalog> <Books> <Book id="1" price="7.95"> <Title>Do Androids Dream of Electric Sheep?</Title> <Author>Philip K. Dick</Author> </Book> <Book id="5" price="5.95"> <Title>The Colour of Magic</Title> <Author>Terry Pratchett</Author> </Book> <Book id="7" price="6.95"> <Title>The Eye of The World</Title> <Author>Robert Jordan</Author> </Book> </Books> </Catalog>

XPath queries are built as if it were a path to the file you want. They separate tags with / and xml attributes are accessed with an @ before the attribute name.
Specifically for ElementTree, you don't specify the full path, just the relative path based on the object you're using.

Searching for all books:

import xml.etree.cElementTree as ET tree = ET.parse('sample.xml') tree.findall('Books/Book')

Searching for the book with title = ‘The Colour of Magic’:

tree.find("Books/Book[Title='The Colour of Magic']") # always use '' in the right side of the comparison

Searching for the book with id = 5:

tree.find("Books/Book[@id='5']") # searches with xml attributes must have '@' before the name

Search for the second book:

tree.find("Books/Book[2]") # indexes starts at 1, not 0

Search for the last book:

tree.find("Books/Book[last()]") # 'last' is the only xpath function allowed in ElementTree

Search for all authors:

tree.findall(".//Author") #searches with // must use a relative path
Voters
Profile icon
YANDER-ALBERTOA
Profile icon
Mosrod
Profile icon
AshaRajagopal
Profile icon
RAFAELPEREZ4
Profile icon
amasad
Profile icon
beneilton
Profile icon
AlfieSimpson
Profile icon
timmy_i_chen
Profile icon
franciscoareasareas
Comments
hotnewtop
Profile icon
timmy_i_chen

Neat! Concise and informative. Thanks!

Profile icon
franciscoareasareas

@timmy_i_chen Thanks. I found it really powerful to navigate through xml. I had written it for Stackoverflow documentation and saved it when they shutdown the site.