Ankündigung

Einklappen
Keine Ankündigung bisher.

HTML in Plugin verarbeiten?

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] HTML in Plugin verarbeiten?

    Hallo,

    ich arbeite gerade an dem Plugin um Werte von der UVR1611 zu laden.
    Ich möchte die Art der Konfiguration ändern. Da bin ich schon recht weit, aber an einer Stelle scheitere ich noch.

    Hier die HTML:
    Code:
     <!--########## Definitionen der Anzeigeparameter ##########--> <div id="pos0">-&nbsp;1,3 &deg;C </div> <div id="pos1">&nbsp;&nbsp;&nbsp;0 W/m²</div> <div id="pos2">-&nbsp;3,3 &deg;C </div> <div id="pos3">&nbsp;58,3 &deg;C </div>
    Jetzt möchte ich den Inhalt der DIV-tags (also z.B. "-&nbsp;1,3 &deg;C") in einen Array einlesen -und zwar sortiert nach den Indizes (pos0, ...), oder noch lieber in einem Konstrukt, bei dem ich per Index auf den Inhalt zugreifen kann.

    Mit LWP:Simple und get kann ich die Datei ja abrufen. Dann hab ich den Inhalt ja in einem String.
    Aber wie zerpflücke ich das dann?



    Gruß,
    Hendrik

    #2
    Hallo,

    mit http://renee-baecker.de/talks/HTML_Parser.pdf geht das sicher.
    Aber ... puh ... die Syntax
    Code:
    sub start_handler{
    return if(shift ne 'a');
    my ($class) = shift->{href};
    my $self = shift;
    my $text;
    $self->handler(text => sub{$text = shift;},"dtext");
    $self->handler(end => sub{push(@links,[$class,$text]) if
    (shift eq 'a')},"tagname");
    }
    erschließt sich mir als Perl Laie nicht. Kann mir jemand Stichworte/Suchbegriffe für das, was man mit "shift", "push" und "->" macht nennen?

    Gruß,
    Hendrik

    Kommentar


      #3
      Ich bin auch kein Perlprofi. Aber wenn ich den Code richtig verstanden habe, läuft dass so:

      Code:
      sub start_handler{
      Wird bei jedem erreichen eines Attributes im HTML aufgerufen...

      $self->handler(text => sub{$text = shift;},"dtext");
      Liest beim erreichen eines textes innerhalb des 'a' Attributes diesen in die Variable $text ein.

      $self->handler(end => sub{push(@links,[$class,$text]) if (shift eq 'a')},"tagname");
      Nach dem lesen des Text, wird der Zeiger weitergeschoben bis das ende des Tags erreichtwurde. Wenn das Ende des 'a' Tags erreicht ist, wird der zuvor gelesene Text in das Array @links geschriben und die Sub verlassen.

      Dies widerhohlt sich für jeden 'a' Tag im HTML. Danach hast du alle Texte der Reihenach (wie sie eingelesen wurden) im Array @links liegen. Dort kannst du dann z.B. mit $links[0] auf das erste gelesene Textelement zugreifen.
      Gruss Patrik alias swiss

      Kommentar


        #4
        Die UVR1611 kann das auch strukturiert ausgeben, ganz sicher! Ich weiss nur nicht mehr, wie genau, weil das ewig her ist und ich selbst (leider?) keine habe..

        War sauberes XML, JSON o.ä. AFAIR; HTML-Tabellen parsen ist IMHO was für Leute mit zuviel Zeit und ohne andere Hobbys

        -> Also mein Tipp wäre: mal zurück auf Los und das richtig verarbeitbare Datenformat finden..
        (Natürlich kann man auch die HTML-Tabelle einlesen, aber das ist schon gedanklich sowas von "kaputt", das Worte nicht reichen)

        Makki
        EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
        -> Bitte KEINE PNs!

        Kommentar


          #5
          Genau das meinte ich im anderen Fred mit -> Murks

          Desshal wäre ich auch dafür, bei der XML Variante zu bleiben. Denn dafür ist XML ja gemacht
          Gruss Patrik alias swiss

          Kommentar


            #6
            Hallo,

            ich habe im Thread zum UVR-Plugin etwas dazu geschrieben.

            Gruß,
            Hendrik

            Kommentar

            Lädt...
            X