Thread XML-Datei in kleine Stücke zerlegen und parsen: XML-Datei zerlegen + parsen (11 answers)
Opened by newbie_needs_help at 2006-01-17 11:10

newbie_needs_help
 2006-01-18 11:38
#61966 #61966
User since
2005-08-17
21 Artikel
BenutzerIn
[default_avatar]
Danke für den Tipp ptk. Ich habe mich aber jetzt schon in XML::Twig eingelesen und es scheint ein gutes Modul zu sein welches meinen Anforderungen genügt ;D

Leider ist denoch ein kleines Probelm aufgetaucht:

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
...
<Entrezgene_unique-keys>
<Dbtag>
<Dbtag_db>HGNC</Dbtag_db>
<Dbtag_tag>
<Object-id>
<Object-id_id>5</Object-id_id>
</Object-id>
</Dbtag_tag>
</Dbtag>
<Dbtag>
<Dbtag_db>LocusID</Dbtag_db>
<Dbtag_tag>
<Object-id>
<Object-id_id>1</Object-id_id>
</Object-id>
</Dbtag_tag>
</Dbtag>
<Dbtag>
<Dbtag_db>MIM</Dbtag_db>
<Dbtag_tag>
<Object-id>
<Object-id_id>138670</Object-id_id>
</Object-id>
</Dbtag_tag>
</Dbtag>
</Entrezgene_unique-keys>
...


Das ist ein kleiner Ausschnitt aus dem XML Code den ich parsen möchte. Leider ist der Tag <Dbtag>, <Dbtag_db>, <Object-id> und <Object-id_id> nicht unique. D.h. sie kommen auch in anderen Tags weiter oben und unten vor. Mich interessiert aber lediglich die Information, die von <Entrezgene_unique-keys> umklammert wird.
Wie kann ich diese Information herausfischen? Wäre nett wenn ihr mir noch mal helfen könntet.

Ich dachte das Problem wäre einfach mit second_child,... zu lösen, aber anscheinend kann das Modul dieses nicht handeln. Gibt es eine andere Funktion die ich aufrufen kann um Sub-Subelemente zu öffnen?
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
#!/usr/bin/perl -w

use warnings;
use strict;
use DBI;
use XML::Twig; #http://xmltwig.com/xmltwig/tutorial/yapc_twig_s4.html for good references!!!

header();

my $twig = new XML::Twig(
TwigHandlers => #Gene-track element will be called when each player element has been parsed

{

"Entrezgene_unique-keys" => \&dbxref

#"Dbtag_tag" => \&dbxref #funzt nicht, weil es mehere TagElemente diesen Typs gibt

#"Object-id_id" => \&dbxref #funzt nicht, weil es mehere TagElemente diesen Typs gibt

}
);

$twig->parsefile("Homo_sapiens.ags"); #built the twig

sub dbxref {
my ($twig, $dbxref) = @_;

#leider gehen diese Ansätze nicht, da ich nur das 'erste Kind' erfassen kann. Wie kann ich weitere Subelemente aufrufen?
my $id = first_child('Dbtag') #->second_child('Dbtag_db')->text;
my $db = first_child('Dbtag') #->second_child('Dbtag_tag')->third_child('Object-id')->fourth_child('Obejct-id_id')->text;

print "$id\t$db\n";
}

View full thread XML-Datei in kleine Stücke zerlegen und parsen: XML-Datei zerlegen + parsen