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
答案 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');
}
});