2011-02-24 18 views
9

¿Hay una manera de analizar la cadena de código HTML en .Net atrás como DOM análisis ...análisis de HTML Cadena

es decir GetElementByTagName ("ABC"). GetElementByTagName ("etiqueta")

tengo este código trozo ...

private void LoadProfilePage() 
{   
    string sURL; 
    sURL = "http://www.abcd1234.com/abcd1234"; 

    WebRequest wrGETURL; 
    wrGETURL = WebRequest.Create(sURL); 

    //WebProxy myProxy = new WebProxy("myproxy",80); 
    //myProxy.BypassProxyOnLocal = true; 

    //wrGETURL.Proxy = WebProxy.GetDefaultProxy(); 

    Stream objStream; 
    objStream = wrGETURL.GetResponse().GetResponseStream(); 

    if (objStream != null) 
    { 
     StreamReader objReader = new StreamReader(objStream); 

     string sLine = objReader.ReadToEnd(); 

     if (String.IsNullOrEmpty(sLine) == false) 
     { 
      ....     
     } 
    } 
} 
+0

si es XHTML válido quizás puedas cargarlo en 'System.Xml.XDocument' – Bazzz

Respuesta

10

Usted puede utilizar el excelente HTML Agility Pack.

Se trata de un analizador de HTML ágil que construye una lectura/escritura DOM y apoya XPATH liso o XSLT (que en realidad no tiene que comprender XPath ni XSLT para usarlo, no se preocupe ...). Es una biblioteca de códigos .NET que le permite analizar archivos HTML "fuera de la web". El analizador es muy tolerante con el HTML malformado del "mundo real". El modelo de objetos es muy similar a lo que propone System.Xml, pero para documentos HTML (o streams).

+0

dangit oded - Acabo de publicar lo mismo solo que soy lento y tu deamon de velocidad! :) +1 de mi parte. – phillip

+0

@Downvoter - ¿me gustaría comentar? – Oded

7

Tome un vistazo a usar el Ejemplo Html Agility Pack

de su uso:

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); 
} 
+1

xpath string debería ser "// a [@href]"? –

2

Puede utilizar el HTML Agility Pack y un poco de XPath (incluso puede descargar el documento para usted):

HtmlWeb web = new HtmlWeb(); 
HtmlDocument doc = web.Load("http://www.abcd1234.com/abcd1234"); 
HtmlNodeCollection tags = doc.DocumentNode.SelectNodes("//abc//tag"); 
2

He usado el HTML Agility Pack para hacer esto exactamente y creo que es genial. Ha sido realmente útil para mí.