www w3schools sintaxis razor_intro parser net mvc htmldocument desde crear cero asp c# html

c# - w3schools - razor html



Cadena a HtmlDocument (7)

Estoy recuperando el documento html por URL usando WebClient.DownloadString(url) pero luego es muy difícil encontrar el contenido del elemento que estoy buscando. Mientras leía, he visto HtmlDocument y que tiene cosas GetElementById como GetElementById . ¿Cómo puedo rellenar un HtmlDocument con el html devuelto por url ?


Al usar Html Agility Pack como lo sugiere SLaks , esto se vuelve muy fácil:

string html = webClient.DownloadString(url); var doc = new HtmlDocument(); doc.LoadHtml(html); HtmlNode specificNode = doc.GetElementById("nodeId"); HtmlNodeCollection nodesMatchingXPath = doc.DocumentNode.SelectNodes("x/path/nodes");


He adaptado un poco la respuesta de Nikhil para simplificarla. Es cierto que no lo he ejecutado a través de un compilador .net y que hay muy buenas razones para las líneas que Nikhil puso en las que he omitido. Sin embargo, al menos en mi caso de uso (una página muy simple) eran innecesarios.

Mi caso de uso fue para un script rápido de powershell:

$htmlText = $(New-Object System.Net.WebClient).DownloadString("<URI HERE>") #Get the HTML document from a webserver $browser = New-Object System.Windows.Forms.WebBrowser $browser.DocumentText = $htmlText $browser.Document.Write($htmlText) $response = $browser.document

En mi caso, esto devolvió un objeto HTMLDocument con objetos HTMLElement , en lugar de los tipos de objeto __ComObject (que son un desafío para usar en el código de clase powershell) devuelto por una llamada a Invoke-WebRequest en PS 5.1.14393.1944

Creo que el código C # equivalente es:

public System.Windows.Forms.HtmlDocument GetHtmlDocument(string html) { WebBrowser browser = new WebBrowser(); browser.DocumentText = html; browser.Document.Write(html); return browser.Document; }


La clase HtmlDocument es un contenedor alrededor de la interfaz COM nativa IHtmlDocument2 .
No puedes crearlo fácilmente desde una cadena.

Debe utilizar el paquete de agilidad HTML .


Para aquellos que no quieren usar el paquete de agilidad de HTML y desean obtener HtmlDocument de una cadena usando el código .net nativo, solo aquí hay un buen artículo sobre cómo convertir una cadena a HtmlDocument.

Aquí está el bloque de código para usar

public System.Windows.Forms.HtmlDocument GetHtmlDocument(string html) { WebBrowser browser = new WebBrowser(); browser.ScriptErrorsSuppressed = true; browser.DocumentText = html; browser.Document.OpenNew(true); browser.Document.Write(html); browser.Refresh(); return browser.Document; }


Para responder a la pregunta original:

HTMLDocument doc = new HTMLDocument(); IHTMLDocument2 doc2 = (IHTMLDocument2)doc; doc2.write(fileText); // now use doc

Luego para convertir de nuevo a una cadena:

doc.documentElement.outerHTML;



usted podría obtener un htmldocument por:

System.Net.WebClient wc = new System.Net.WebClient(); System.IO.Stream stream = wc.OpenRead(url); System.IO.StreamReader reader = new System.IO.StreamReader(stream); string s = reader.ReadToEnd(); HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(s);

así que tienes getbiyid y getbyname ... pero cuanto más te gustaría con
Paquete de agilidad HTML como se sugiere. Puede hacerlo: doc.DocumentNode.SelectNodes (xpathselector) o regex para analizar el documento.

por cierto: ¿por qué no regex? . es genial si puedes usarlo correctamente ... pero xpath también es muy poderoso ... así que "elige tu veneno"

cu