1 2 3 4
if ($response->is_success) { my $parser = XML::LibXML->new(validation => 1); my $doc = $parser->parse_file($response); dump_nodes($doc->getDocumentElement);
"Could not create file parser context for file "HTTP::Response=HASH(0x1036abc)": No such file or directory at C:/Apache/........
1
2
3
4
5
6
7
$response = $ua->request($request)
if ($response->is_success) {
print $response->decoded_content;
}
else {
print STDERR $response->status_line, "\n";
}
my $doc = $parser->parse_string($response->decoded_content);
1 2 3 4
:2: I/O error : failed to load external entity "https://server.de/report-1.dtd" <!DOCTYPE SCAN SYSTEM "https://server.de/report-1.dtd"> ^ :5: validity error : Validation failed: no DTD found !
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
use XML::Parser; my $zeiger = new XML::Parser (); $zeiger->setHandlers (Start => \&anfang,End => \&ende,Char=>\&inhalt ); $zeiger->parsefile ("test.xml"); sub anfang { $wert_des_zeigers = shift; $starttag= shift; print "<$starttag>"; print "\n"; } sub ende { ($wert_des_zeigers,$endtag) = @_; print "</$endtag>\n"; } sub inhalt { ($wert_des_zeigers,$inhalt)=@_; print " $inhalt"; }
1 2
Unknown Parser handler type: start Valid types: Attlist CdataEnd CdataStart Char Comment Default Doctype DoctypeFin Element End Entity ExternEnt ExternEntFin Final Init Notation Proc Start Unparsed XMLDecl at C:Apache/cgi-bin/test.pl line 53.
1 2 3
$zeiger->parse_string($response->content); $zeiger->parsefile ("test.xml");
1 2 3
if ($response->is_success) { my $doc = $response->content; ####in einem Verzeichnis speichern
1 2 3 4 5
my $fname = "/home/test/myxml/out.xml"; # oder anderes Verzeichnis open (my $out, '>', $fname) or die $!; binmode $out; # as above print $fh $doc; close $fh or die $!;
2012-05-09T09:20:09 GwenDragonWie beim erstellen einer Datei:
Code (perl): (dl )1 2 3 4 5my $fname = "/home/test/myxml/out.xml"; # oder anderes Verzeichnis open (my $out, '>', $fname) or die $!; binmode $out; # as above print $fh $doc; close $fh or die $!;
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
use XML::Parser; my $zeiger = new XML::Parser (); $zeiger->setHandlers ( Start => \&anfang, End => \&ende,Char=>\&inhalt ); $zeiger->parsefile ("test.xml"); print "<html><head><body>"; sub anfang { %watnu1=("persona"=>"<table border=1 bgclor=yellow>","name"=> "<tr><td>","telefon"=>"<td>","beruf"=>"<td>","adresse"=>"<td>"); $wert_des_zeigers = shift; $starttag=shift; print $watnu1{$starttag}; print "\n"; } sub ende { %watnu2=("persona"=>"</table>","name"=> "</td>","telefon"=>"</td>","beruf"=>"</td>","adresse"=>"</td></tr>"); ($wert_des_zeigers,$endtag) = @_; print "$watnu2{$endtag}"; } sub inhalt { ($wert_des_zeigers,$inhalt)=@_; print " $inhalt"; } print "</body></html>";
2012-05-09T11:25:22 perl-snaksAlso ich ziehe einen Report via HTTPs und kommt als response ein XML. Diese möchte ich zu HTML parsen.
Das Parsen möchte ich mit XML::Parser machen. Leider diese XML::Parser bietet keine Parse_String Methode.
1
2
3
4
5
use XML::Parser;
$p1 = new XML::Parser(Style => 'Debug');
$p1->parsefile('REC-xml-19980210.xml');
$p1->parse('<foo id="me">Hello World</foo>');
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
my $parser = XML::LibXML->new(); my $doc = $parser->parse_string($response->content); my $root = $doc->documentElement(); print $root->nodeName, "\n"; foreach my $node ($root->childNodes){ print $node->nodeName, "\n<br>"; if ($node->hasAttributes){ foreach ($node->attributes){ printf(" %10s: %-20s\n",$_->name, $_->value); } } }
1 2 3 4 5 6 7
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE SCAN SYSTEM "https://w3.com/example.dtd"> <SERVER value="None"> <ERROR number="1000"> fehler aufgetreten </ERROR> </SERVER>