Tolwin: Array nach Zeichen durchsuchen und ersetzen

Hallo Forum,

zuvor möchte ich erwähnen dass ich ein absoluter PERL Einsteiger bin.
Ich stehe derzeit vor folgender Aufgabe. Per Filehandle lese ich eine
XML Datei in das Array @Zeilen

open(FILEHANDLE, "<C:\datei.xml");

@Zeilen = ("");
while(<FILEHANDLE>){
   push(@Zeilen,$_);
}

Im XML File gibt es nun einen Value der einen Text mit HTML Entities
enthält. Diese möchte ich jetzt Zeile für Zeile suchen und ersetzen.
Bpsw. &lt in < oder $gt in >. Kann mir hierzu jemand einen Tipp geben wie ich vorgehen müsste.

Vielen Dank schon im Voraus
Tolwin

  1. Im XML File gibt es nun einen Value der einen Text mit HTML Entities
    enthält. Diese möchte ich jetzt Zeile für Zeile suchen und ersetzen.
    Bpsw. &lt in < oder $gt in >. Kann mir hierzu jemand einen Tipp geben wie ich vorgehen müsste.

    "Reguläre Ausdrücke" - "regular expressions"

    1. Vielen Dank für die Tipps!

      Viele Grüße
      Tolwin

  2. hi,

      
      
    open(FILEHANDLE, "<C:\datei.xml");  
      
    @Zeilen = ("");  
    my $oneLine = "";  
    while($oneLine = <FILEHANDLE>){  
        $oneLine =~ s/\&lt/</g;  
        push(@Zeilen,$oneLine);  
    }  
    close FILEHANDLE;  
    
    

    Im XML File gibt es nun einen Value der einen Text mit HTML Entities
    enthält. Diese möchte ich jetzt Zeile für Zeile suchen und ersetzen.
    Bpsw. &lt in < oder $gt in >. Kann mir hierzu jemand einen Tipp geben wie ich vorgehen müsste.

    kanns leider grad nicht ausporbieren, aber sollte so klappen.
    kann evtl. sein dass du das '&' nicht mit \ maskieren musst, bzw. das '<' schon.

    mfG,
    steckl

  3.   
    open(FILEHANDLE, "<C:\datei.xml");  
      
    @Zeilen = (""); # Damit legst Du aber schon in $Zeilen[0] einen Leerstring an  
    my %entities= (  
        'lt' => '<',  
        'gt' => '>',  
        'auml' => 'ä',  
         #usw  
        'amp' => '&',  
    );  
      
    while(<FILEHANDLE>){  
        s/&([^;]+);/$entities{$1}/g;  
        push(@Zeilen,$_);  
    }  
    
    

    Besser ist es im Allgemeinen aber, Du verwendest ein Modul wie z.B. XML::Twig um Deine Datei zu parsen.

  4. Hell-O!

    Per Filehandle lese ich eine XML Datei in das Array @Zeilen

    Das machst du recht umständlich, du kannst den Inhalt auch direkt zuweisen:

    open FH, $file || die "Can't open $file: $!";  
    flock FH, LOCK_SH;  
    my @lines = <FH>;  
    close FH;
    

    Im XML File gibt es nun einen Value der einen Text mit HTML Entities enthält. Diese möchte ich jetzt Zeile für Zeile suchen und ersetzen.

    Dann tue dies, entweder beim Einlesen direkt:

    use [link:http://search.cpan.org/~gaas/HTML-Parser-3.55/lib/HTML/Entities.pm@title=HTML::Entities];  
    my @lines;  
    open FH, $file || die "Can't open $file: $!";  
    flock FH, LOCK_SH;  
    while(<FH>) {  
      push @lines, decode_entities($_);  
    }  
    close FH;
    

    Oder mit Hilfe von map:

    use [link:http://search.cpan.org/~gaas/HTML-Parser-3.55/lib/HTML/Entities.pm@title=HTML::Entities];  
    open FH, $file || die "Can't open $file: $!";  
    flock FH, LOCK_SH;  
    my @rawdata = <FH>;  
    close FH;  
    my @lines = map { decode_entities($_) }, @rawdata;
    

    Du siehst, es führen viele Wege nach Rom :-)

    Siechfred

    --
    Ich bin strenggenommen auch nur interessierter Laie. (molily)
    Welcome To Carcass Cuntry || Steuerfreie Geburtsbeihilfen?  || RT 221 Erfurt-Altstadt i.V.