我有点卡在我正在做的一个使用 Python 的项目上——我对这个项目很陌生。我被告知使用 ElementTree 并从传入的 XML 文件中获取指定的数据。这听起来很简单,但我不擅长编程。下面是一个(非常!)传入文件的小示例以及我尝试使用的代码。
我想要接下来的任何提示或地方。我曾尝试搜索并关注其他人所做的事情,但我似乎无法获得相同的结果。我的目标是获取“活动”、“房间”和“方向”中包含的信息,但稍后我需要获取更多信息。
我尝试过使用 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)