gpt4 book ai didi

python - 使用 Python ElementTree 提取 XML 的特定行

转载 作者:行者123 更新时间:2023-12-01 05:52:55 27 4
gpt4 key购买 nike

我对我正在做的一个使用Python的项目有点困惑——我对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)

最佳答案

import xml.etree.cElementTree as ET
tree = ET.parse('test.xml')
for elem in tree.getiterator():
if elem.tag=='{http://www.namespace.co.uk}AssetEquipment':
output={}
for elem1 in list(elem):
if elem1.tag=='{http://www.namespace.co.uk}Active':
output['Active']=elem1.text
if elem1.tag=='{http://www.namespace.co.uk}Direction':
output['Direction']=elem1.text
if elem1.tag=='{http://www.namespace.co.uk}Location':
for elem2 in list(elem1):
if elem2.tag=='{http://www.namespace.co.uk}RoomLocation':
for elem3 in list(elem2):
if elem3.tag=='{http://www.namespace.co.uk}Room':
output['Room']=elem3.text
print output

关于python - 使用 Python ElementTree 提取 XML 的特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13543369/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com