解析XML属性名称

时间:2018-04-24 21:22:21

标签: python python-2.7

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

返回始终为None。我正在使用ElementTree。阅读文档(https://docs.python.org/3.0/library/xml.etree.elementtree.html)和许多StackOF页面。

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

尝试使用&#34; active = int(root [&#39; stats / activesessions&#39;])&#34;代替root find返回此错误:

TypeError: list indices must be integers, not str

还试过xmltodict但是使用ElementTree更糟糕。错误永远是&#39;列表索引必须是整数&#39;。

最后,这是一个动态XML文档。通过ROW进行索引不是一种选择,因为在空闲时,软件返回10行,例如在负载下返回15,其他行与其他行混合。我必须以孩子的名字拉。

提前感谢您的任何帮助!

此外:

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

active = root[5].text
print active

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这显然是我不理解XML以及它的结构。在我的代码中添加了这个,我得到了我正在寻找的返回值。

router.get('/accounts', async (req, res) => {
  try {
    const response = await axios.get(`${config.url}/accounts`, {
      auth: config.auth
    });
    const data = await response.data.results;
    res.json(data);
  } catch (e) {
    console.log(e);
    res.send('Could not connect');
  }
});