Werte aus HTML-Tabelle lesen

  • Hallo,

    ich würde gerne Werte aus einer HTML Tabelle auslesen. Leider komme ich mit RegEx überhaupt nicht klar - auch nach dem Lesen eines Tutorials... (PS: kennt jemand noch ein gutes Tutorial???)


    Hier mal eine Beispiel Tabelle:

    Spoiler anzeigen

    Ich würde gerne alle Zeilen/Spalten als Array haben, ich hatte es bereits mit _IETableWriteToArray probiert - aber da wird mir nichts in der Spalte "Status" (StateGreen / StateRed) angezeigt.

    Also aus der Zeile:
    <tr><td><input name="marker" value="MonObj10" type="checkbox"></td><td><a name="2">2</a></td><td align="center"><img src="StateGreen.jpg" name="StateGreen.jpg" "="" align="absmiddle"></td><td><a href="http://192.168.0.1:5588/State?ID=MonObj10">SRV02TEST - Prozess Test</a></td><td>process count:[26] cpu use:[0%] run</td></tr>

    Sollte dann z.B. : "MonObj10|StateGreen|SRV02TEST - Prozess Test|process count:[26] cpu use:[0%] run" werden.


    Wäre nett wenn mir jemand ein passendes RegEx-Pattern geben könnte, eine Erklärung dazu wäre natürlich noch am Besten. :D

    Vielen Dank schon mal.

  • Man könnte so ein Pattern basteln - klar.
    Aber ob das so wahnsinnig stabil ist bezweifel ich einfach mal.
    Hier mal ein Beispiel für deine Zeile:

    Code
    <tr.+?<td.+?value=[""'](.+?)['""].+<img.+?name=[""'](.+?).jpg.+?([^>]+?)</a.+?<td>([^<]+)

    Allerdings ist die Übertragbarkeit auf andere Beispiele eher zweifelhaft.
    RegEx ist auch nicht die wirklich sinnvollste Lösung zur Bearbeitung von XML-Code.

    Ich habe mir für deren Prozessierung daher mal einen Parser geschrieben welcher mir ermöglicht per CSS-Selektoren den Code zu zerlegen.
    Die (noch bisschen verbuggte) Funktion hab ich mal in den Anhang gelegt.
    Dein HTML-Beispiel könnte man dann damit so prozessieren:

    Einmal editiert, zuletzt von AspirinJunkie (22. Dezember 2017 um 08:59)

  • Ich danke dir.


    Leider funktioniert der RegEx nicht wenn mehrere Spalten in einer Zeile stehen.

    z.B.

    Spoiler anzeigen


    Bei deinem Beispiel mittels "HTMLParser" funktioniert das, aber wie bekomme ich alle Tabellen ausgelesen?

    Leider lässt sich die "3" in der Zeile bzw. Funktion _CssSelectFromString:
    $a_Tds = _CssSelectFromString($s_String, "tr:nth-of-type(3) td")

    nicht über eine Variable ausführen:

    $i = 3
    $a_Tds = _CssSelectFromString($s_String, "tr:nth-of-type(" & $i & ") td")

    ?

  • Leider funktioniert der RegEx nicht wenn mehrere Spalten in einer Zeile stehen.

    Wie ich bereits sagte: Wirklich stabil nur als RegEx wird schwierig.

    Das Beispiel mit meiner CSSSelectFromString war ja lediglich als Beispiel gedacht um zu zeigen dass man andere Ansätze als RegEx bei XML in Erwägung ziehen sollte.
    Es gibt auch glaube ich im englischen Forum eine XPath-UDF welche ähnliches leisten sollte.

    Ich hab dir das Beispiel mal auf alle Zeilen erweitert.
    Wichtig ist zu verstehen, wie die Ausgabe von CssSelectFromString aussieht.
    Daher hab ich dir noch paar ArrayDisplays dazu geschrieben:

  • Die gelöschte Lösung von oben - voll kommentiert :) Vielleicht hilft dir das ja weiter.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.