解析XML属性名称

2024-09-29 22:00:36 发布

您现在位置:Python中文网/ 问答频道 /正文

Python,目前正在使用2.7,但可以很容易地更改为最新和最好的版本

需要解析此XML并返回项中包含的INT值。这不是我的XML。这来自一个企业级软件

<counters>
<item name="stats/counters/session/responsetime" type="int">1047</item>
<item name="stats/counters/session/responsecount" type="int">7423</item>
<item name="stats/counters/init/inittime" type="int">36339</item>
<item name="stats/counters/init/fetchtime" type="int">8097</item>
<item name="stats/connectionsetups" type="int">579</item>
<item name="stats/activesessions" type="int">4294967289</item>
<item name="stats/activeconnections" type="int">0</item>
</counters>

代码:

import xml.etree.ElementTree as ET
import xml

def _getstats():
 resp = requests.get(urlStats)

 #Writing XML to disk. This makes parsing it MUCH easier.
 with open('stats_10.xml', 'wb') as f:
    f.write(resp.content)
    f.close()

tree = ET.parse('stats_10.xml')
root = tree.getroot()

active = root.find('stats/activesessions')

print active

回报总是零。我用的是ElementTree。通读文档(https://docs.python.org/3.0/library/xml.etree.elementtree.html)和许多页面

我认为问题在于解析器不理解斜杠

试图使用“active=int(root['stats/activesessions'])代替返回此错误的root find按名称拉取:

TypeError: list indices must be integers, not str

也尝试过xmltodict,但这比使用ElementTree更糟糕。错误总是“列表索引必须是整数”

最后,这是一个动态XML文档。按行索引不是一个选项,因为在空闲时,软件返回10行,在加载时返回15行,其他行与其他行混合。我得按孩子的名字取

提前感谢您的帮助

补充:

我可以通过XML运行迭代并提取值。但是,如上所述,XML将发生变化,行数将增加,从而使我的索引失效

active = root[5].text
print active

Tags: name软件initsessionstatstyperootxml
2条回答

我相信find方法是在寻找标记名,而不是属性值。您需要找到item标记,检查它是否具有name属性,然后检查该属性是否等于“stats/activesessions”。如果满足此条件,则可以读入项目标记的值

这显然是我不理解XML及其结构。在我的代码中添加了这个,我得到了我想要的返回值

for item in root.findall("./item[@name='system/starttime']"):
starttime = int(item.text)

相关问题 更多 >

    热门问题