Thread XML, "Abschnitte" aus einer Datei miteinander vergleichen (3 answers)
Opened by roli at 2012-07-06 12:14

roli
 2012-07-13 14:57
#159816 #159816
User since
2004-12-31
423 articles
BenutzerIn
[default_avatar]
Hi,

ich habe mich jetzt so wie ich Zeit hatte mit dem Thema beschäftigt, hier meine aktuelle Lösung:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/perl

use XML::XPath;
use strict;
use warnings;
use Data::Dumper;

my $file = 'F://Daten//scripte//bsp.xml';
my $xp = XML::XPath->new(filename=>$file);
my $found_ab2="";
my $found_tobe="";
 
my $nodeset_ab2 = $xp->find('//ab2:prod0');
my $ab2_num_nodes = $nodeset_ab2->size;

foreach my $node_ab2 ($nodeset_ab2->get_nodelist) {
    $found_ab2 = XML::XPath::XMLParser::as_string($node_ab2);
}

my $nodeset_ab3 = $xp->find('//ab3:prod0');
my $ab3_num_nodes = $nodeset_ab3->size;

foreach my $node_ab3 ($nodeset_ab3->get_nodelist) {
    $found_ab3 = XML::XPath::XMLParser::as_string($node_ab3);
}

if ($found_ab2 eq $found_ab3) {
    print "ab2 und ab3 sind gleich\n";
}
else {
    print "ab2 und ab3 sind NICHT gleich\n";
    print "Found ab2:\n $found_ab2 \n";
    print "\nFound ab3:\n $found_ab3 \n";
}

print "Anzahl Nodes ab2: $ab2_num_nodes\n";
print "Anzahl Nodes ab3: $ab3_num_nodes\n";

Mir ist jetzt aber aufgefallen, das es in den XMLs Nodes wie
ab3:prod0
ab3:prod1
ab3:prod2
...
existieren. Die würde ich gerne mit ihrem "ab2" Partner vergleichen. Ich dachte mir, das ich aus dem
Code (perl): (dl )
$xp->find('//ab3:prod0')

ein RegEx mache, aber noch habe ich nicht gefunden wie. Ein
Code (perl): (dl )
$xp->find("//ab2:prod*")
bringt folgende Fehlermeldung:
Can't locate object method "size" via package "XML::XPath::Number" at ../xml_cmp.pl line

Danke
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2

View full thread XML, "Abschnitte" aus einer Datei miteinander vergleichen