
[Snippet] HTML Parser in C#
Exista prea multi programatori care au / au avut nevoie de un astfel de parser in C# si totusi exista prea putine solutii pe Internet in acest sens. Din pacate .NET Framework nu vine cu o astfel de solutie. Ca si alternativa exista Microsoft HTML Object Library dar care, mie cel putin, imi facea figuri din cauza ca imi aparea eroarea "Potential security risk ..." (nu am reusit sa o dezactivez, si oricum nu ar fi eleganta o solutie ce ar presupune ca userul sa faca ceva manual).
Am incercat si, sper eu, am reusit intr-o oarecare masura sa fac acest lucru, sa creez o librarie care sa parseze HTMLuri. In acelasi timp am vrut sa fie la fel de usor de folosit precum libraria System.Xml (lucru care a complicat putin lucrurile). Sunt constient de cateva posibile buguri care mai pot aparea in folosirea librariei, dar pentru siteurile pe care am folosit-o a mers foarte bine (microsoft.com , adobe.com , gracenote.com etc). Dificultatea in implementarea acestei librarii provine tocmai de la faptul ca HTMLul este destul de imprevizibil.
Clasele care apartin librariei sunt:
1. HTMLDocument
2. HTMLNode
3. HTMLAttributeList
4. HTMLAttribute
Exemple:
1. Folosirea innerText-uluiPentru HTMLul:
Code:
<html>
<body>
abcdef
</body>
</html>
Vrem sa afisam abcdef
Code:
HTMLDocument ht = new HTMLDocument(data);//in data se afla htmlul,data de tip string
ht.ProcessSource();
HTMLNode hn=ht.DocumentElement.SubNodes[0];//ne aflam in body
Console.WriteLine(hn.innerText); //am afisat abcdef
2. Folosirea atributelorPentru HTMLul:
Code:
<html>
<body>
<a href="http://microsoft.com">MS</a>
</body>
</html>
Vrem sa afisam linkul si textul linkului
Code:
HTMLDocument ht = new HTMLDocument(data);//in data se afla htmlul,data de tip string
ht.ProcessSource();
HTMLNode hn=ht.DocumentElement.SubNodes[0];//ne aflam in body
hn=hn.SubNodes[0];//ne aflam in a
Console.WriteLine(hn.AttributeList.GetValueByName("href")); //am afisat http://microsoft.com
Console.WriteLine(hn.innerText);//am afisat MS
Alti(e) membrii/functii:- innerHTML
- AttributeList.Add
- AttributeList[i].Name
- AttributeList[i].Value
- AttributeList.AttributeCount
- AttributeList.Items
- AddNode
- TagName
- parentNode
- NodeCount
Pentru feedback va rog sa postati. In cazul in care ati gasit buguri va rog sa postati codul vostru+htmlul folosit.
Update (14 / 10 / 2009):- Se pot folosi tagurile (in upper case) <BR>, <IMG>, <P> etc fara a fi nevoie sa "le inchideti".
- Cautarea printre atribute nu mai este case sensitive
Download (sursa+binar):http://www.megaupload.com/?d=IELHVV1W