1

したがって、このコードは、あるソースから別のソースへの属性値をまったく同じ構造で照合するように機能するため、xml は示していません。フラッシュ XML::LibXML がどのように機能するかを考えただけで、それを行うためのより良い方法があると思いました。

#get from one data source
for my $movie($review_details1->findnodes('/result_set/results/review')){
    my $id = $movie->findvalue('@movie_id');

    #check if it exists in the other data source
    for my $new_movie($review_details2->findnodes('result_set/results/review')){
        my $new_id = $new_movie->findvalue('@movie_id');
        if ($id eq $new_id){
        print "ID $id matches NEW ID $new_id\n";
        }
    }
}

乾杯

4

2 に答える 2

2

毎回 2 番目の XML をループするのではなく、各構造を 1 回ループするほうがよいかもしれませんが、TMTOWTDI . XML ファイルが小さいかどうかはおそらく問題ではありませんが、大きい場合は実行する価値があるかもしれません。

例えば

my %movie_ids;
for my $movie($review_details1->findnodes('/result_set/results/review')){
    my $id = $movie->findvalue('@movie_id');
    $movie_ids{$id}++;

for my $new_movie($review_details2->findnodes('result_set/results/review')){
    my $new_id = $new_movie->findvalue('@movie_id');
    $movie_ids{$new_id}++;

次に、全体を調べる%movie_idsと、各キーの値は 1 (一致なし) または > 1 (一致) のいずれかになります。

最初に両方のファイルを結合してから、同様のことを行うことができますが、1 つの XML ファイルを調べるだけで済みます。

于 2014-05-20T09:36:01.083 に答える