我很難找到一個很好的基本示例,說明如何使用Element Tree解析python中的XML。從我所能找到的,這似乎是用於解析XML的最簡單的庫。這裏是我正在使用的XML的示例:使用ElementTree在Python中解析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
這裏有幾件事情我已經試過,沒有他們的努力,報告說,他們找不到時間序列(或其他任何東西我試過):
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>)
我想有什麼東西在裏面並沒有像真正的文件,所以我incremently去掉的東西,直到它的工作。以下是我更改的行:
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中命名空間的更多信息,請參閱this page。
可能我建議您查看'提供的'etree'模塊, lxml'?我最近發現它,發現它遠遠優於ElementTree。它被寫爲一個完全模擬ElementTree的替代品。 – jathanism
我最終與lxml一起工作,因爲使用起來有點容易,但我仍然遇到上述問題。對於解決方法,我事先掃描xml文件並刪除所有「xsi:type」實例。以下答案中列出的方法可以正常工作。 – Casey