Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7665[/thread]

XML::Parser::parsefile durch die Struktur ...: iterieren, aber wie ? (Seite 2)

Leser: 5


<< |< 1 2 >| >> 19 Einträge, 2 Seiten
ptk
 2006-02-01 00:03
#62468 #62468
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Hinzufügen will ich nur, dass sich eventbasierte Parser meistens für große Datenmengen eignen (der Parser muss nur einen kleinen Teil der Datei im Speicher halten), dafür in der Handhabung meist umständlicher ist. Mit treebasierten Parsern geht das Handling meist einfacher zu den Preis, dass die gesamten Daten gleichzeitig im Speicher stehen (und das kann viel mehr sein, als die XML-Datei auf der Festplatte verbraucht).
Matze
 2006-02-01 15:46
#62469 #62469
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Achso, mmh, dann wäre vielleicht doch XML::LibXML besser.

Also, es gibt bei XML::LibXML Zugangsfunktionen zu den Tags.
Und die Struktur wird nicht in der Reihenfolge der Tags verändert ?

Dann wäre nur noch eins, was passiert mit Attributen, werden die an den Anfang oder ans Ende gestellt, bei XML::LibXML ?
Oder werden sie garnicht beachtet ?

Danke schonmal für die viele Hilfe.

MfG. Matze
Mit freundlichen Grüßen: Matze
ptk
 2006-02-01 23:36
#62470 #62470
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Du scheinst mit XML::Simple zu vergleichen, wo tatsächlich alles (Attribute, Unterelemente, Text) vermischt auftreten kann. Bei XML::LibXML hast du für alle Typen eigene Zugriffsmethoden.
renee
 2006-02-02 01:46
#62471 #62471
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das ist ein relativ simples Beispiel (ungetestet):

test.xml:
Code: (dl )
1
2
3
4
5
6
7
8
<foren>
<forum value="1">
http://board.perl-community.de
</forum>
<forum value="2">
http://perlmonks.org
</forum>
</foren>


script.pl
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl

use strict;
use warnings;
use XML::LibXML;

my $file = 'test.xml';
my $parser = XML::LibXML->new();
my $tree = $parser->parse_file($file);
my $root = $tree->getDocumentElement();

my @foren = $root->getElementsByTagName('forum');

foreach my $forum(@foren){
print $forum->getAttribute('value'),": ",$forum->getData(),"\n";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2006-02-02 01:58
#62472 #62472
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Oder mit XPath (funktionierend):

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/perl

use strict;
use warnings;
use XML::LibXML;

my $parser = XML::LibXML->new();
my $tree = $parser->parse_fh(\*DATA);
my $root = $tree->getDocumentElement();
for ($root->findnodes('//forum')) {
print $_->findvalue('./@value') . " " . $_->findvalue('./text()'), "\n";
}
_ _ D A T A _ _
<foren>
<forum value="1">
http://board.perl-community.de
</forum>
<forum value="2">
http://perlmonks.org
</forum>
</foren>
\n\n

<!--EDIT|ptk|1138838353-->
renee
 2006-02-02 02:25
#62473 #62473
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@ptk: kannst Du mein Beispiel mal testen?? Ich habe hier kein XML::LibXML...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2006-02-02 10:13
#62474 #62474
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Statt getData willst du wahrscheinlich das Ergebnis von textContent().
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
#!/usr/bin/perl

use strict;
use warnings;
use XML::LibXML;

my $file = 'test.xml';
my $parser = XML::LibXML->new();
my $tree = $parser->parse_fh(\*DATA);
my $root = $tree->getDocumentElement();

my @foren = $root->getElementsByTagName('forum');

foreach my $forum(@foren){
print $forum->getAttribute('value'),": ",$forum->textContent(),"\n";
}
_ _ DATA _ _
<foren>
<forum value="1">
http://board.perl-community.de
</forum>
<forum value="2">
http://perlmonks.org
</forum>
</foren>
renee
 2006-02-02 11:32
#62475 #62475
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hat sich das irgendwie geaendert?? Ich habe das getData() aus einem Buch (was aber schon etwas aelter ist)...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
ptk
 2006-02-03 00:57
#62476 #62476
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Keine Ahnung, mit getData wurde nur undef zurückgegeben.
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2006-01-30 17:29.