Το
HtmlAgilityPack είναι ένας Html parser για την πλατφόρμα .NET και υποστηρίζει
XPATH και
XSLT parsing. Μας δίνει την δυνατότητα να διαχειριστούμε το
DOM με όποιον τρόπο θέλουμε με μεγάλη ευκολία και είναι πολύ ανεκτικό στο κακοδιαμορφωμένο Html που πολλές φορές μπορεί να συναντήσουμε sto web.Το object model μοιάζει πολύ με αυτό που προτείνει το
System.Xml αλλά για Html documents. Επίσης το
HtmlAgilityPack υποστηρίζει και
Linq to Objects (μέσω Linq to Xml Like Interface).
Παραδείγματα εφαρμογής:
- Διόρθωση σελίδας ή παραγωγή Html. Μπορείτε να "φτιάξετε" μια σελίδα με τον τρόπο που θέλετε, να προσθέσετε / αντιγράψετε / διαγράψετε nodes, να πειράξετε το DOM κλπ.
- Web scanners. Μπορείτε εύκολα να διαβάσετε τα img/src ή a/href με ελάχιστα XPATH queries.
- Web scrappers. Μπορείτε για παράδειγμα να μετατρέψετε εύκολα μια υπάρχουσα σελίδα σε RSS, με μόνο ένα XSLT αρχείο που θα χρησιμεύει για binding.
Παράδειγμα κώδικα (C#):
HtmlDocument doc = new HtmlDocument();
doc.Load("file.htm");
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
{
HtmlAttribute att = link["href"];
att.Value = FixLink(att);
}
doc.Save("file.htm");Ένα πρόβλημα που συνάντησα με το
HtmlAgiltyPack ήταν κατά το parsing σελίδας με ελληνικό κείμενο και encoding
windows-1253. Για κάποιο λόγο οι ελληνικοί χαρακτήρες δεν εμφανίζονταν σωστά και δεν μπορούσα να το διορθώσω ότι encoding και να έβαζα στο
HtmlDocument. Ο κώδικας με το πρόβλημα:
HtmlWeb web = New HtmlWeb();
HtmlDocument doc = New HtmlDocument();
doc = web.Load("http://www.site-with-greek-encoding.com");
doc.OptionDefaultStreamEncoding = Encoding.GetEncoding("windows-1253");Τελικά αναγκάστηκα να διαβάσω το html από τη σελίδα με τον παραδοσιακό τρόπο και ύστερα να το κάνω parse με το
HtmlAgilityPack όπως παρακάτω:
HtmlDocument doc = New HtmlDocument();
WebRequest req = WebRequest.Create("http://www.site-with-greek-encoding");
StreamReader stream = New StreamReader(req.GetResponse().GetResponseStream(), Encoding.GetEncoding("windows-1253"));
doc.LoadHtml(stream.ReadToEnd());Το project στο Codeplex:
http://htmlagilitypack.codeplex.com
Tags: HtmlAgilityPack, HtmlDocument, DOM, greek encoding, streamreader, html parsing