我有以下XML文档
<data>
<point address="com.example.www" time="Jul 30, 2013 10:02:56 PM" protocol="http" type="2" body="404 Not Found" name="Example Site" />
<point address="com.example.test" time="Jul 29, 2013 07:45:03 AM" protocol="https" type="2" body="This is a test" name="Test.example" />
.......
</data>
我使用了以下Python代码:
import libxml2
def ReadValue(pn, dt):
return [attr.content for attr in input_file.xpathEval("/data/point[@protocol='%s']/@%s" % (pn, dt))]
protocol = ["http", "https"]
data_type = ["body", "type", "time", "name"]
for i in protocol:
for j in data_type:
print ReadValue(i, j)
exit()
我怀疑ReadValue
是解析超过200k标签时的瓶颈。它运行速度很慢,甚至在运行时我也无法Ctrl-C脚本。有没有比使用上面提到的代码更好的实现?
由于
答案 0 :(得分:1)
然而,可能存在另一种低效率。
您正在为每个协议和每个data_type循环,然后为每个组合运行xpath,这需要对每个组合进行代价高昂的调用,并且我怀疑搜索成本高昂,因为我没有索引。
当您阅读每个元素并以这种方式收集数据时,您最好通过XML进行一次传递并阅读协议和data_type