我正在从以xml格式提供信息的专业服务器读取仪器数据。我写的代码是: 从LXML进口etree作为ET使用从lxml xpath命令获取的数据填充Python列表
xmlDoc = ET.parse('http://192.168.1.198/Bench_read.xml')
print ET.tostring(xmlDoc, pretty_print=True)
dmtCount = xmlDoc.xpath('//dmt')
print(len(dmtCount))
dmtVal = []
for i in range(1, len(dmtCount)):
dmtVal[i:0] = xmlDoc.xpath('./address/text()')
dmtVal[i:1] = xmlDoc.xpath('./status/text()')
dmtVal[i:2] = xmlDoc.xpath('./flow/text()')
dmtVal[i:3] = xmlDoc.xpath('./dp/text()')
dmtVal[i:4] = xmlDoc.xpath('./inPressure/text()')
dmtVal[i:5] = xmlDoc.xpath('./actVal/text()')
dmtVal[i:6] = xmlDoc.xpath('./temp/text()')
dmtVal[i:7] = xmlDoc.xpath('./valveOnPercent/text()')
print dmtVal
而且我得到的结果是:
$python XMLparse2.py
<response>
<heartbeat>0x24</heartbeat>
<dmt node="1">
<address>0x21</address>
<status>0x01</status>
<flow>0.000000</flow>
<dp>0.000000</dp>
<inPressure>0.000000</inPressure>
<actVal>0.000000</actVal>
<temp>0x00</temp>
<valveOnPercent>0x00</valveOnPercent>
</dmt>
<dmt node="2">
<address>0x32</address>
<status>0x01</status>
<flow>0.000000</flow>
<dp>0.000000</dp>
<inPressure>0.000000</inPressure>
<actVal>0.000000</actVal>
<temp>0x00</temp>
<valveOnPercent>0x00</valveOnPercent>
</dmt>
</response>
...Starting to parse XML nodes
2
[]
...Done
的sooo,无所不出来。我试过在xpath调用中使用/value
来代替/text()
,但结果没有改变。是我的问题:
1)for循环中的xpath命令不正确?或
2)我的结构列表变量dmtVal
的方式存在问题?或
3)还有什么我完全失踪?
我欢迎任何建议!在此先感谢...
嗨伊霍尔,谢谢你。我是一个相对的小白菜,所以有些这是在我的头上。我将详细研究它,这既是一次学习体验,也是因为它可能为我将来需要从类似的xml文件中提取出来的其他项目提供一种方法。 – 2012-08-15 16:18:14
我是新来的列表理解,所以需要一些时间来理解这一点。我更详细地看过它,而且这很光滑。再次感谢伊霍尔。 – 2012-08-15 18:41:24
列表解析和生成器是Python的强大功能。我建议你看看[Udacity CS212课程](http://www.udacity.com/view#Course/cs212/CourseRev/apr2012)上的两个视频:关于[列表解析](http:// www .youtube.com/watch?v = MvXxpU3wcLc)和[生成器表达式](http://www.youtube.com/watch?v=qZVWbkE-Fg0)。 – 2012-08-15 22:17:36