Versuch, ein HTML-Dokument zu parsen und einige Elemente (irgendwelche Links zu Textdateien) zu extrahieren.
Die aktuelle Strategie besteht darin, ein HTML-Dokument in eine Zeichenfolge zu laden. Dann finden Sie alle Instanzen von Links zu Textdateien. Es könnte ein beliebiger Dateityp sein, aber für diese Frage ist es eine Textdatei.
Das Endziel besteht darin, eine IEnumerable
-Liste von String-Objekten zu haben. Dieser Teil ist einfach, aber die Analyse der Daten ist die Frage.
Die ersten Ansätze sind:
href=
beginnt und mit .txt
endet
Die Frage ist:
Aktualisierung: Ein großes Lob an Matthew zum HTML Agility Pack-Vorschlag. Es hat gut funktioniert! Der XPath-Vorschlag funktioniert auch. Ich wünschte, ich könnte beide Antworten als "die Antwort" markieren, aber ich kann es offensichtlich nicht. Sie sind beide gültige Lösungen für das Problem.
Hier ist eine C # -Konsolen-App, die den von vorgeschlagenen Regex verwendet . Es liest die Zeichenfolge in Ordnung und enthält keine href, die nicht mit .txt beendet wird. Mit dem angegebenen Beispiel enthält es die Datei .txt.snarg
NICHT korrekt in den Ergebnissen (wie in der HTML-String-Funktion angegeben).
Ich würde Regex empfehlen. Warum?
Regex-Ausdrücke sind nicht schwer zu lesen, solange Sie WRITE-Regexes schreiben können.
Verwenden Sie dies als regulären Ausdruck:
href="([^"]*\.txt)"
Erläuterung:
es wird in eine Escape-Zeichenfolge wie folgt umgesetzt:
%Vor%Dann können Sie über Ihre Matches iterieren:
%Vor%Weder. Laden Sie es in ein (X / HT) MLDocument und verwenden Sie XPath, eine Standardmethode zum Manipulieren von XML und sehr leistungsfähig. Die zu betrachtenden Funktionen sind SelectNodes und SelectSingleNode .
Da Sie anscheinend HTML (nicht XHTML) verwenden, sollten Sie HTML Agility Pack verwenden. Die meisten Methoden und Eigenschaften entsprechen den zugehörigen XML-Klassen.
Beispielimplementierung mit XPath:
%Vor%Alternativ zu Matthew Flasches Vorschlag DOM (z. B. wenn Sie an einem X? L-Allergieausbruch leiden)
Manchmal bekommt es einen schlechten Ruf - ich denke, weil Implementierungen manchmal lustig sind, und die nativen COM-Schnittstellen sind ein bisschen unhandlich ohne (kleine) schlaue Helfer, aber ich habe es als robust empfunden , stabile und intuitive / erforschbare Möglichkeit, HTML zu parsen und zu bearbeiten.
Tags und Links c# linq parsing regex linq-to-xml