Schrift
[thread]12199[/thread]

XML-Parser beenden?

Leser: 2


<< >> 6 Einträge, 1 Seite
Gast Gast
 2008-07-17 18:27
#112261 #112261
hallo,

ich habe mehrere xml-dateien, die ich mit perl parse.
jetzt habe ich aber mitbekommen, dass ich gerade einmal ein viertel der datei parsen muss, der rest ist uninteressant. durch das parsen der restlichen zeilen geht aber eine menge zeit verloren ...

wie kann ich das parsen der datei an einem bestimmten öffnenden tag beenden?

der code sieht derzeit ungefähr so aus:

Parseraufruf:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
for(my $j = 0;$j <= 8;$j++){
if (-e $Files[$j]){
if (-z $Files[$j]){
push(@noData , "d:/perl/test/".$Date."/".$i."/".$Files[$j]);
}
else{
# parse die aktuelle Datei
$testSuitName=$Files[$j];
$pParser -> parsefile($Files[$j]);
}
}
}


Subroutine:
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
sub anfang{
my($p, $starttag, %attr) = @_;

# beginnt eine neue Datei?
if($starttag eq "testsuite") {

# gibt es Fehler oder Abbrüche?
if ($attr{errors} ne "0" or $attr{failures} ne "0"){
# neuer test-eintrag
print FILE "\t\t<testsuite name=\"$testSuitName\" time=\"$attr{timestamp}\">\n";
$openTestSuite = 1;

}
}
elsif ($starttag eq "testcase"){

$testCaseClass = $attr{classname};
$testCaseName = $attr{name};
}
elsif ($starttag eq "error"){

$attr{message} =~ tr/<>\"/[]'/;
if ($attr{message} eq "") {$attr{message} = "."};

print FILE "\t\t\t<error classname=\"$testCaseClass\" name=\"$testCaseName\" message=\"$attr{message}\" type=\"$attr{type}\" />\n";
}
elsif ($starttag eq "failure"){

$attr{message} =~ tr/<>\"/[]'/;
if ($attr{message} eq "") {$attr{message} = "."};

print FILE "\t\t\t<failure classname=\"$testCaseClass\" name=\"$testCaseName\" message=\"$attr{message}\" type=\"$attr{type}\" />\n";
}
}


kann mir bitte jemand helfen?

danke schonmal im voraus ... björn
murphy
 2008-07-17 19:03
#112266 #112266
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Um selektiv nur Teile einer XML-Datei zu bearbeiten soll sich ja CPAN:XML::Twig eignen. Benutzt habe ich das selber aber noch nie.
When C++ is your hammer, every problem looks like your thumb.
Gast Gast
 2008-07-17 19:25
#112268 #112268
danke, das schaut auf den ersten blick vielversprechend aus.

ich werde mir das mal genauer zu gemühte führen, aber ich wäre über weitere tipps dankbar, dann muss ich nämlich nicht mein ganzes script umschreiben :-/

gruß björn
Loki211
 2008-07-17 19:50
#112274 #112274
User since
2008-07-17
2 Artikel
BenutzerIn
[default_avatar]
So, ich habe mich dann hier gleich mal angemeldet ...

Das mit dem XML::Twig wird wohl so nicht funktionieren, da ich aus den Tags auch Attribute beziehe und wenn ich das hier richtig verstehe

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
my $twig= new XML::Twig( 
                twig_handlers =>                  # player will be called
                  { player => \&player }          # when each player element
                       );                         # has been parsed

$twig->parsefile( "nba.xml");                     # build the twig
$twig->flush;                                     # flush the end of the twig  

sub player
  { my( $twig, $player)= @_;                      # handlers params are always
                                                  # the twig and the element

Quelle: http://www.xmltwig.com/xmltwig/tutorial/index.html

bekomme ich nur den Pointer und den Inhalt zwischen den Tags ...
renee
 2008-07-17 22:12
#112281 #112281
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du kannst auch alle Attribute aus einem Tag mit XML::Twig bekommen...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
[...]
use Data::Dumper;

my $parser = XML::Twig->new(twig_handlers => {
'DeinTag' => sub{_tag($self,@_)},
});

sub _tag{
my ($self,$t,$tag) = @_;
print Dumper $tag->{att};
}
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/
Loki211
 2008-07-18 12:14
#112295 #112295
User since
2008-07-17
2 Artikel
BenutzerIn
[default_avatar]
okay, das ist doch schonmal super ... dann werde ich mein script umschreiben müssen, aber lieber einmal diese zeit "verschwenden" als jedesmal ca. drei viertel der parsezeit ....

danke, ich versuche es dann jetzt mal und wenn ich wieder fragen habe, dann komme ich nerven :D
<< >> 6 Einträge, 1 Seite



View all threads created 2008-07-17 18:27.