It is currently Fri Sep 10, 2010 10:33 am




Post new topic Reply to topic  [ 1 post ] 
[Snippet] HTML Parser in C# 
Author Message
Braincode Team Leader
User avatar

Joined: Mon Sep 10, 2007 11:40 pm
Posts: 2731
Location: London
Post [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-ului

Pentru 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 atributelor

Pentru 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


Tue Oct 13, 2009 7:36 pm
Profile
 
Post new topic Reply to topic  [ 1 post ] 


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
Powered by phpBB © phpBB Group.
Designed by boogiesbc and Vjacheslav Trushkin .