Разбор XML в Python с использованием примера ElementTree

Мне трудно найти хороший, базовый пример того, как разобрать XML в python с помощью Element Tree. Из того, что я могу найти, это, кажется, самая простая библиотека для анализа XML. Вот образец XML, с которым я работаю:

<timeSeriesResponse>
    <queryInfo>
        <locationParam>01474500</locationParam>
        <variableParam>99988</variableParam>
        <timeParam>
            <beginDateTime>2009-09-24T15:15:55.271</beginDateTime>
            <endDateTime>2009-11-23T15:15:55.271</endDateTime>
        </timeParam>
     </queryInfo>
     <timeSeries name="NWIS Time Series Instantaneous Values">
         <values count="2876">
            <value dateTime="2009-09-24T15:30:00.000-04:00" qualifiers="P">550</value>
            <value dateTime="2009-09-24T16:00:00.000-04:00" qualifiers="P">419</value>
            <value dateTime="2009-09-24T16:30:00.000-04:00" qualifiers="P">370</value>
            .....
         </values>
     </timeSeries>
</timeSeriesResponse>

Я могу делать то, что мне нужно, используя жестко закодированный метод. Но мне нужно, чтобы мой код был более динамичным. Вот что сработало:

tree = ET.parse(sample.xml)
doc = tree.getroot()

timeseries =  doc[1]
values = timeseries[2]

print child.attrib['dateTime'], child.text
#prints 2009-09-24T15:30:00.000-04:00, 550

Вот несколько вещей, которые я попробовал, но ни одна из них не сработала, сообщив, что они не смогли найти timeSeries (или что-нибудь еще, что я пробовал):

tree = ET.parse(sample.xml)
tree.find('timeSeries')

tree = ET.parse(sample.xml)
doc = tree.getroot()
doc.find('timeSeries')

По сути, я хочу загрузить XML-файл, выполнить поиск по тегу timeSeries и выполнить итерации по тегам значения, возвращая dateTime и значение самого тега; все, что я делаю в приведенном выше примере, но не сложно кодировать интересующие меня разделы xml. Может кто-нибудь указать мне на некоторые примеры или дать мне несколько советов о том, как работать с этим?

Спасибо за помощь. Использование обоих приведенных ниже предложений сработало над предоставленным мною файлом примера, однако они не сработали с полным файлом. Вот ошибка, которую я получаю из реального файла, когда я использую метод Эда Карреля:

 (<type 'exceptions.AttributeError'>, AttributeError("'NoneType' object has no attribute 'attrib'",), <traceback object at 0x011EFB70>)

Я подумал, что в реальном файле есть что-то, что ему не нравится, поэтому постепенно удалял все, пока оно не заработало. Вот строки, которые я изменил:

originally: <timeSeriesResponse xsi:schemaLocation="a URL I removed" xmlns="a URL I removed" xmlns:xsi="a URL I removed">
 changed to: <timeSeriesResponse>

 originally:  <sourceInfo xsi:type="SiteInfoType">
 changed to: <sourceInfo>

 originally: <geogLocation xsi:type="LatLonPointType" srs="EPSG:4326">
 changed to: <geogLocation>

Удаление атрибутов с xsi: ... решило проблему. «Xsi: ...» не является допустимым XML? Мне будет трудно удалить их программно. Любые предлагаемые обходные пути?

Вот полный XML-файл:http://www.sendspace.com/file/lofcpt

Когда я изначально задавал этот вопрос, я не знал о пространствах имен в XML. Теперь, когда я знаю, что происходит, мне не нужно удалять атрибуты "xsi", которые являются объявлениями пространства имен. Я просто включаю их в свои поиски xpath. Видетьэта страница для получения дополнительной информации о пространствах имен в lxml.

Ответы на вопрос(2)

Ваш ответ на вопрос