x-VieW: XML file auslesen

Hallo Leute,

Ich versuche eine XML-File zu lesen, aber scheints mir das ganze läuft nicht richtig. Ich bkomme nur weisse Seite und keine Fehlermeldung.
Ich habe folgendes probiert:
-----------
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:standard);

my $path    = "xml";

open(FHD, "<$path/test.xml");
my @lines=<FHD>;
close (FHD);
foreach my $array(@lines)
{
  chomp($array);
  print "$array\n";
}
-----------
wenn ich die "test.xml" mit "bla.txt" ersetze, dann funktioniert das Lesen und Ausgeben.
Kann mir jemand helfen und vielleicht mir sagen kann, ob solches Vorgehen richtig oder falsch ist.

Danke im Voraus

Gruss
x-VieW

  1. wenn ich die "test.xml" mit "bla.txt" ersetze, dann funktioniert das Lesen und Ausgeben.

    Kann eigentlich nicht sein, höchstens im kaputten IE, dem der htpp header egal ist.

    Kann mir jemand helfen und vielleicht mir sagen kann, ob solches Vorgehen richtig oder falsch ist.

    Du verschickst keinen header. Der Browser (ausser dem IE der weiss es immer besser) muss wissen was für Daten er grade bekommt. Für HTML z.b.

    print "Content-Type: text/html\n\n"; <-- Zwei Newlines!!!

    Das richtet sich aber danach was du anzeigen möchtest. In deinem Falle vielleicht auch text/plain

    Struppi.

    1. Hallo Struppi,

      erstmal danke für die Antwort.
      Ich hatte auch mal den Header eingesetzt (print "Content-Type: text/html\n\n";). Ich habs mit "text/plain" probiert, funtioniert auch nicht :(

      Es müsste so funtioniern oder ???

      Gruss
      x-VieW

  2. Hi,

    Ich versuche eine XML-File zu lesen, aber scheints mir das ganze läuft nicht richtig. Ich bkomme nur weisse Seite und keine Fehlermeldung.

    Wie sieht der Source dieser Seite aus?

    use strict;
    use CGI::Carp qw(fatalsToBrowser);
    use CGI qw(:standard);
    my $path    = "xml";
    open(FHD, "<$path/test.xml");
    my @lines=<FHD>;
    close (FHD);
    foreach my $array(@lines)
    {
      chomp($array);
      print "$array\n";
    }

    Du solltest einen http-header vorausschicken (mindestens den content-type). Wenn Du das nicht machst, wird eben der Inhalt des Files bis zur ersten Leerzeile als header interpretiert (und demzufolge auch nicht angezeigt).

    wenn ich die "test.xml" mit "bla.txt" ersetze, dann funktioniert das Lesen und Ausgeben.

    Mit welchem Browser testest Du? Mit einem, der http kann oder mit dem IE?

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
  3. Hallo Leute,
    Es ist ja unglaublich, es funktioniert.
    Ich habe die Datei nicht geändert, aber habe mit NS6 versucht. Er hat mir es richtig angzeigt, dann bin ich zum IE gegangen und funktioniert auf einmal einwandsfrei ;O
    Entweder mein PC bzw. Browser spinnt oder brauche mal eine Pause. ;-)
    Ich danke allen die mitgeholfen haben.
    Gruss
    x-VieW

  4. Ich mach mal hier weiter, weil ich sehe du benutzt ja auch CGI.pm

    Was heißt übrigens klappt nicht? Das ist eine sehr dürftige Fehlerbeschreibung.

    use strict;
    use CGI::Carp qw(fatalsToBrowser);
    use CGI qw(:standard);

    print header('text/plain');

    my $path    = "xml";

    open(FHD, "<$path/test.xml");

    Immer checken ob's geklappt hat!

    open FHD, "<$path/test.xml" || die "konnte $path/test.xml nicht zum lesen öffnen, weil: $!";

    my @lines=<FHD>;

    chomp(my @lines=<FHD>);

    close (FHD);
    foreach my $array(@lines)
    {
      chomp($array);
      print "$array\n";

    Aber, warum entfernst du erst die Newlines und machst sie dann wieder rein?

    }

    wenn ich die "test.xml" mit "bla.txt" ersetze, dann funktioniert das Lesen und Ausgeben.

    Tja, was sagst das Skript, wenn du das öffnen der Datei Kontrollierst?

    Ansonsten sollte das Skript laufen.

    Struppi.

    1. Moin Moin !

      my $path    = "xml";

      open(FHD, "<$path/test.xml");

      Ansonsten sollte das Skript laufen.

      Fast, Struppi: xml ist keine absolute Pfadangabe, und xml/test.xml erst recht nicht. Die meisten Webserver setzen zwar das aktuelle Verzeichnis auf das Verzeichnis mit dem CGI, aber darauf sollte man sich nicht verlassen (müssen).

      Es sollte also $path='/home/x-view/xml' oder $path='C:/My Documents/xml' heißen. (Und ja, Windows akzeptiert auch "forward slashes" als Pfadtrenner, schon seit DOS 1.0. Nur einige Anwendungen haben Probleme damit.)

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
      1. Moin Moin !

        my $path    = "xml";

        open(FHD, "<$path/test.xml");

        Ansonsten sollte das Skript laufen.

        Fast, Struppi: xml ist keine absolute Pfadangabe, und xml/test.xml erst recht nicht. Die meisten Webserver setzen zwar das aktuelle Verzeichnis auf das Verzeichnis mit dem CGI, aber darauf sollte man sich nicht verlassen (müssen).

        Naja, _das_ was du zitiert hast habe ich auch nicht geschrieben. Ich schrob:

        Immer checken ob's geklappt hat!

        open FHD, "<$path/test.xml" || die "konnte $path/test.xml nicht zum lesen öffnen, weil: $!";

        Damit kann man dann zumindest herausfinden, ob es so ist wie du sagst. Und aus dem gleichen Grund wie du schrobst ist eben diese Überprüfung sinnvoll.

        Es sollte also $path='/home/x-view/xml' oder $path='C:/My Documents/xml' heißen. (Und ja, Windows akzeptiert auch "forward slashes" als Pfadtrenner, schon seit DOS 1.0. Nur einige Anwendungen haben Probleme damit.)

        Das ist falsch.
        Geb mal im prompt "cd:c/" ein und ich habe jetzt auf die schnelle gar keine Anwendung gefunden, die das akzeptiert. Perl allerdings ist da schlauer.

        Struppi.

        1. Moin Moin !

          (Und ja, Windows akzeptiert auch "forward slashes" als Pfadtrenner, schon seit DOS 1.0. Nur einige Anwendungen haben Probleme damit.)

          Das ist falsch.
          Geb mal im prompt "cd:c/" ein und ich habe jetzt auf die schnelle gar keine Anwendung gefunden, die das akzeptiert. Perl allerdings ist da schlauer.

          command.com und cmd.exe sind zwei von den Applikationen, die Probleme mit Forward Slashes haben.

          Microsoft Windows 2000 [Version 5.00.2195]
          (C) Copyright 1985-2000 Microsoft Corp.

          C:>notepad c:/winnt/system.ini

          ... funktioniert.

          C:>"c:\Program Files\Windows Media Player\mplayer2.exe" c:/Fun/wavs/bettylaf.wav

          ... funktioniert

          C:>"c:\Program Files\Windows NT\Accessories\wordpad.exe" c:/winnt/system.ini

          ... funktioniert

          C:>c:\winnt\system32\mspaint.exe c:/winnt/zapotec.bmp

          ... funktioniert nicht, findet c:\zapotec.bmp nicht.

          Wenn's dich beißt, schreib ein stupides kleines Programm, daß eine Textdatei über API- oder libc-Routinen öffnet, eine Zeile liest und ausgibt. Alles mit Forward Slashes. Es wird funktionieren. Es funktioniert immer dann nicht, wenn ein Programm per Programmlogik Backslashes erwartet. Siehe mspaint.exe.

          Struppi.

          Alexander

          --
          Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"