0

我有以下 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()

当我解析超过 200k 个标签时,我怀疑这ReadValue是瓶颈。它运行得太慢了,即使我在运行时也无法 Ctrl-C 脚本。有没有比使用上面提到的代码更好的实现?

谢谢

4

1 回答 1

1

然而,可能还有另一个低效率。

您正在为每个协议和每个 data_type 循环,然后为每个组合运行一个 xpath,这需要对每个组合进行昂贵的调用,我怀疑搜索成本很高,因为我不认为有索引。

您最好在读取每个元素并以这种方式收集数据时对 XML 进行一次传递并读取协议和 data_type

于 2013-07-31T22:54:31.280 回答