23 Stimmen

Gibt es eine Alternative zu HTML Tidy?

Ich habe HTML Tidy in meiner Anwendung eingebettet, um eingehendes HTML zu bereinigen. Aber Tidy hat eine enorme Menge an Fehlern, und sie direkt im Quellcode zu beheben ist mein schlimmster Alptraum. Der Tidy-Quellcode ist eine unlesbar Abscheulichkeit. Tausende Zeilen Funktionen, schlechte Variablennamen, Spaghetti-Code usw. Es ist wirklich schrecklich.

Noch schlimmer ist, dass die offizielle Entwicklung anscheinend eingestellt wurde. In den letzten 12 Monaten gab es drei Schreibvorgänge im offiziellen CVS-Repository. Aber es ist schon viel länger tot und begraben...

Also suche ich nach einer OSS C- oder C++-Anwendung/Bibliothek, die das kann, was Tidy kann (wenn es Lust hat): fehlerhaftes HTML-Markup korrigieren und in gültiges XHTML umwandeln (das ist der Teil, der mich interessiert). Und ich meine jede Art von fehlerhaftem Markup.

Gibt es so etwas da draußen?

EDIT: Ich benötige es sowohl für Manipulationen am DOM-Baum durch ein XML-Verarbeitungstool als auch für die allgemeine Einhaltung der XHTML-Spezifikation. Meine App muss HTML von Benutzern akzeptieren (das oft in vielerlei Hinsicht ungültig ist) und gültiges XHTML ausgeben können. Es muss sogar mit HTML umgehen können, das normalerweise nicht in einem Browser angezeigt wird, weil der Benutzer es von Hand bearbeitet hat und danach nicht überprüft hat.

Ein Ersatz für Tidys fehlerkorrigierenden Parser... der nicht schlecht ist. Mir macht es nichts aus, wenn es Fehler gibt, wenn der Quellcode lesbar ist und ich Probleme selbst beheben kann, oder wenn es aktive Entwickler gibt, die zeitnah Bugfixes bereitstellen.

0 Stimmen

Ich weiß nicht, ob das für dich nützlich ist, aber es gibt eine Java-Bibliothek namens TagSoup (home.ccil.org/~cowan/XML/tagsoup), die anscheinend ein paar C++-Ports hat, vielleicht, außer dass eines nicht kostenlos ist und ich mir nicht sicher bin, ob das andere gewartet wird. Es erzeugt eine Reihe von SAX-Ereignissen, aber das in XML-Ausgabe umzuwandeln sollte nur eine Frage des Anbringens des richtigen Rohrs am Auslauf sein. Ich selbst habe es noch nie benutzt.

2voto

pavpanchekha Punkte 2033

Könnten Sie uns mitteilen, wofür Sie dieses Tool verwenden möchten? Möchten Sie statische Webseiten reparieren oder einen Art von Filterungsschritt vor anderen Manipulationen durchführen, so dass ein Tool fehlerhafte Webseiten verarbeiten kann?

Persönlich schreibe ich mein eigenes Tool über Python's BeautifulSoup oder lxml, wann immer ich es brauche --- es ist höchstens ein Dutzend Zeilen Skript und macht viel von dem, was ich möchte.

0 Stimmen

Ich kann kein Python oder seine Bibliotheken verwenden. Dies ist eine GUI, native Code-Anwendung. Die Integration des Python-Interpreters ist keine Option.

1 Stimmen

Nun ja, für eine GUI-Native-Code-App ist die Integration des Python-Interpreters technisch eine Option, aber vielleicht keine attraktive, wenn man die Vor- und Nachteile abwägt. docs.python.org/extending/embedding.html

0 Stimmen

Dann würde ich mir native Bindungen für lxml ansehen --- es kann das Parsen von HTML auch bei schrecklich kaputtem HTML sehr gut bewältigen.

2voto

Benjamin W. Punkte 37771

Es gibt ein neues, schönes, ordnungsgemäßes HTML 5 unterstützendes Tidy, so dass die Alternative zum alten, hässlichen Tidy Tidy wäre (GitHub-Repository).

1voto

austincheney Punkte 1069

Versuchen Sie Pretty Diff. Es handelt sich um einen deutlich überlegenen Verschönerungsalgorithmus, der keine Annahmen über Ihre Eingabe trifft.

http://prettydiff.com/?m=beautify&html

10 Stimmen

Offenlegen Sie Ihre Zugehörigkeit.

-1voto

balthisar Punkte 187

Für etwas, das tatsächlich Code repariert, ist HTML Tidy immer noch die beste Wahl. Es gibt viele Linters, aber eigentlich nichts, was Fehler in HTML repariert, außer Tidy.

Auf den ersten Blick könnten moderne OOP-Programmierer denken, dass der Quellcode eine unlesbare Grausamkeit ist, aber in der C-Welt ist Tidy eine ziemlich ausgefeilte Bibliothek, die viele fortgeschrittene OO-Konzepte verwendet und eine sehr durchdachte Benutzeroberfläche bietet, die nahezu alle Funktionen in einer reinen C-API freigibt.

Ein Gelegenheitsentwickler wird sich verloren fühlen, aber sobald er eingetaucht ist, ist der Code ziemlich schön. Zugegeben, Namenskonventionen sind ein gemischtes Bild, aber PR's sind willkommen!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X