1
我有點卡在我正在做的使用Python的項目上 - 我很新。我被告知使用ElementTree並從傳入的XML文件中獲取指定的數據。這聽起來很簡單,但我不擅長編程。下面是一個(非常!)一個傳入文件的小例子,以及我正在嘗試使用的代碼。使用Python提取XML的特定行ElementTree
我想任何提示或地方去與此。我嘗試過搜索並追蹤其他人做了什麼,但我似乎無法獲得相同的結果。我的目標是獲得包含在「活動」,「房間」和「方向」中的信息,但稍後我需要獲得更多信息。
我已經嘗試過使用XPath,但它不能很好地工作,尤其是對於xml使用的命名空間以及我需要的所有內容的XPath會變得太大的事實。我簡化了這個例子,所以我可以理解要做的原則,因爲在此之後它必須擴展以從「AssetEquipment」及其多個實例中獲取更多信息。然後最終目標是將一臺設備的所有信息保存到字典中,以便稍後操作它,每臺新設備都在自己的單獨字典中。
例XML:
<AssetData>
<Equipment>
<AssetEquipment ID="3" name="PC960">
<Active>Yes</Active>
<Location>
<RoomLocation>
<Room>23</Room>
<Area>
<X-Area>-1</X-Area>
<Y-Area>2.4</Y-Area>
</Area>
</RoomLocation>
</Location>
<Direction>Positive</Direction>
<AssetSupport>12</AssetSupport>
</AssetEquipment>
</Equipment>
例如代碼:
tree = ET.parse('C:\Temp\Example.xml')
root = tree.getroot()
ns = "{http://namespace.co.uk}"
for equipment in root.findall(ns + "Equipment//"):
tagname = re.sub(r'\{.*?\}','',equipment.tag)
name = equipment.get('name')
if tagname == 'AssetEquipment':
print "\tName: " + repr(name)
for attributes in root.findall(ns + "Equipment/" + ns + "AssetEquipment//"):
attname = re.sub(r'\{.*?\}','',attributes.tag)
if tagname == 'Room': #This does not work but I need it to be found while
#in this instance of "AssetEquipment" so it does not
#call information from another asset instead.
room = equipment.text
print "\t\tRoom:", repr(room)
如何['xmltodict'](http://pypi.python.org/pypi/ xmltodict/0.2)? –