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()

ReadValue200k を超えるタグを解析する場合、それがボトルネックであると思われます。実行が非常に遅いため、実行中にスクリプトを Ctrl-C することさえできません。上記のコードを使用するよりも優れた実装はありますか?

ありがとう

4

1 に答える 1

1

しかし、別の非効率性があるかもしれません。

各プロトコルと各 data_type に対してループしてから、組み合わせごとに xpath を実行します。これには、それぞれにコストのかかる呼び出しが必要であり、インデックスがあるとは思えないため、コストのかかる検索が疑われます。

各要素を読み取り、その方法でデータを収集するときに、XML を 1 回パスしてプロトコルと data_type を読み取る方がよいでしょう。

于 2013-07-31T22:54:31.280 に答える