Thread XML mit unterschiedlichen Knoteninhalten parsen (12 answers)
Opened by schnerd at 2012-07-19 18:32

Gast schnerd
 2012-07-19 18:32
#160068 #160068
Hallo,

bin relativ neu in perl und mit XML hab ich bisher noch nichts am Hut gehabt, aber mir wurde die Aufgabe aufgetragen ein vorhandenes XML auszuwerten.

Ich hab hier im Forum und auf anderen Seiten auch schon eine Menge in Erfahrung bringen können (vielen Dank schon einmal dafür) aber jetzt hab ich ein Problem, mit dem ich nicht so recht klar komme:

Ich gebe hier am Besten mal Teile des Codes an:
Code: (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
#!/usr/bin/perl
# Module verwenden
use XML::Simple;
use Data::Dumper;

# Bearbeitungsdatei definieren
my $path = "dump.xml";

# Bearbeitungsdatei einlesen und nach Regeln aufbauen um diese dann in while einzeln anzusprechen und abzufragen
my $data = XMLin('dump.xml', KeyAttr => ['Rule_Number']);

# Anzahl der Regeln bestimmen fuer while Funktion
my $tmp = XMLin('dump.xml');
my $count = @{$tmp->{startpunkt}->{rule}->{rule}};

# Zaehlerstart bei 1
my $i = 1;

# WHILE LOOP
while ($i <= $count) {
if ($data->{startpunkt}->{rule}->{rule}->{$i}->{src}->{members}->{reference}) {
print "Quelle: ", $data->{startpunkt}->{rule}->{rule}->{$i}->{src}->{members}->{reference}->{Name}, "\n";
}
elsif ($data->{startpunkt}->{rule}->{rule}->{$i}->{src}->{compound}->{compound}) {
print "Quelle: ", $data->{startpunkt}->{rule}->{rule}->{$i}->{src}->{compound}->{compound}->{Name}, "\n";
}
if ($data->{startpunkt}->{rule}->{rule}->{$i}->{dst}->{members}->{reference}) {
print "Ziel: ", $data->{startpunkt}->{rule}->{rule}->{$i}->{dst}->{members}->{reference}->{Name}, "\n";
}
elsif ($data->{startpunkt}->{rule}->{rule}->{$i}->{dst}->{compound}->{compound}) {
print "Ziel: ", $data->{startpunkt}->{rule}->{rule}->{$i}->{dst}->{compound}->{compound}->{Name}, "\n";
}
print "\n";
}
$i ++; # INCREMENT THE VARIABLE EACH TIME
}



Und dann noch das vom Parser ausgegebene XML (gekürzt) - das echte XML ist in einer Zeile geschrieben und sehr unübersichtlich:

Ausgabe (5.3kb):

Code: (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
$VAR1 = {
'startpunkt' => {
'queries_adtr' => {},
'rule' => {
'rule' => {
'127' => {
'Dienst' => {
'members' => {
'reference' => {
'Table' => 'services',
'Name' => 'dienste1'
}
},
'Class_Name' => 'dienste',
'compound' => {},
'Name' => {},
'op' => {}
},
'Quelle' => {
'members' => {
'reference' => [
{
'Table' => 'N_objects',
'Name' => 'Name_1'
},
{
'Table' => 'N_objects',
'Name' => 'Name_2'
}
]
},
'Class_Name' => 'Quelle',
'compound' => {},
'Name' => {},
'op' => {}
},

'Ziel' => {
'members' => {
'reference' => {
'Table' => 'N_objects',
'Name' => 'Name_3'
}
},
'Class_Name' => 'Ziel',
'compound' => {},
'Name' => {},
'op' => {}
},
},
}
},
}
};


Ich bleibe jetzt an der Stelle hängen, wo unter Quelle->members->reference zwei Einträge stehen. Kann mir da bitte bitte jemand helfen?

Vielen Dank schon einmal!

Gruß schnerd

modedit Editiert von pq: more-tags um ausgabe hinzugefügt
Last edited: 2012-07-19 18:37:53 +0200 (CEST)

View full thread XML mit unterschiedlichen Knoteninhalten parsen