Hallo Zusammen,
Ich habe versucht per XPath Werte aus einer HTML Seite auszulesen. Der HTML Code ist aber nicht wohlgeformt und entsprechend schlägt der Versuch fehl.
Nun meine Frage: Wie löse ich dieses Problem am Besten? Ist es möglich den HTML Code durch ein Preprocessing aufzuräumen (z.B durch https://metacpan.org/pod/HTML::Tidy)? Wie würde ich dies integrieren?
Danke vielmals für eure Hilfe
Nicolas
===
defmod Zaehler1 HTTPMOD http://192.168.1.20:80/ 30
attr Zaehler1 handleRedirects 1
attr Zaehler1 reading01Name PowerTotal
attr Zaehler1 reading01XPath-Strict /html/body/table/tbody/tr[42]/td[2]/text()
Hallo Nicolas,
Willkommen im Forum! Bitte setze Code in Code-Tags (das ist die # hier über diesem Eingabefeld).
Um dein Problem nachzustellen bräuchten wir mehr Infos, z.B. was http://192.168.1.20:80/ an Output liefert (ggf. anonymisiert).
Gruß
Christoph
Zitat von: Nicolas am 18 Juni 2020, 12:26:05
Ist es möglich den HTML Code durch ein Preprocessing aufzuräumen (z.B durch https://metacpan.org/pod/HTML::Tidy)? Wie würde ich dies integrieren?
Es gibt das Attribut "preProcessRegex" bei HTTPMOD...
https://forum.fhem.de/index.php/topic,112180.msg1065098.html#msg1065098
EDIT: falls du selbst "wurschteln" willst... Wenn du Unterstützung brauchst/willst (in dem Fall leider nicht von mir ;) ), dann wie geschrieben: den HTML-Output posten...
Gruß, Joachim
Vielen Dank für die Antworten.
Ich konnte das Problem inzwischen beheben. Mein HTML file war kein gültiges XML, da nicht well-formed.
Beispiel zum Reproduzieren (in diesem Fall nicht well-formed, da <head> nicht geschlossen ist).
<html>
<head>
<body>
<div>1000</div>
</body>
</html>
Nachdem ich die Dokumentation nochmals durchgelesen habe, war die Antwort klar:
reading[0-9]+XPath
defines an xpath to one or more readings when parsing HTML data (see examples below)
reading[0-9]+XPath-Strict
defines an xpath to one or more readings when parsing XML data (see examples below)
reading[0-9]+XPath macht genau was ich wollte. Als erstes wird die HTML Datei in well-formed gemacht (so wie es HTML::Tidy auch machen würde), danach der XPath angewandt. Wenn ich nun also reading01XPath statt reading01XPath-Strict verwende, dann klappt das parsen von einer HTML Datei perfekt.
Viele Grüsse,
Nicolas