1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Header>
...
</env:Header>
<env:Body>
<ab1:RequestA>
<ab2:TextId>
...
</ab2:TextId>
<ab3:TextId>
...
</ab3:TextId>
</ab1:RequestA>
</env:Body>
</env:Envelope>
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";
$xp->find('//ab3:prod0')
$xp->find("//ab2:prod*")
2012-07-13T12:57:34 roli[...]
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
bringt folgende Fehlermeldung:Code (perl): (dl )$xp->find("//ab2:prod*")
Can't locate object method "size" via package "XML::XPath::Number" at ../xml_cmp.pl line
[...]
$xp->find('//node()[starts-with(local-name(), "prod")]')