2012-02-27 8 views
8

Sabiendo que no puedo usar HTMLAgilityPack, solamente .NET recta, decir que tengo una cadena que contiene algo de HTML que necesito para analizar y editar en tales formas:¿.NET Framework ofrece métodos para analizar una cadena HTML?

  • encuentran controles específicos en la jerarquía por id o por etiqueta
  • modificar (y lo ideal sería crear) atributos de los elementos encontrados

¿hay métodos disponibles en .NET para hacerlo?

+1

lo sé ... [el uso de expresiones regulares] (http://stackoverflow.com/a/1732454/119477) –

+4

no sé ... no use regex http: // stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1758162 # 1758162 –

+1

Si su HTML resulta ser XHTML, entonces podría usar las bibliotecas XML estándar para analizar, atravesar y modificándolo. – Douglas

Respuesta

5

HtmlDocument

GetElementById

HtmlElement

Puede crear un documento HTML ficticia.

WebBrowser w = new WebBrowser(); 
w.Navigate(String.Empty); 
HtmlDocument doc = w.Document; 
doc.Write("<html><head></head><body><img id=\"myImage\" src=\"c:\"/><a id=\"myLink\" href=\"myUrl\"/></body></html>"); 
Console.WriteLine(doc.Body.Children.Count); 
Console.WriteLine(doc.GetElementById("myImage").GetAttribute("src")); 
Console.WriteLine(doc.GetElementById("myLink").GetAttribute("href")); 
Console.ReadKey(); 

Salida:

file: /// C:

sobre: ​​myURL

Edición de elementos:

HtmlElement imageElement = doc.GetElementById("myImage"); 
string newSource = "d:"; 
imageElement.OuterHtml = imageElement.OuterHtml.Replace(
     "src=\"c:\"", 
     "src=\"" + newSource + "\""); 
Console.WriteLine(doc.GetElementById("myImage").GetAttribute("src")); 

Salida:

file: /// D:

+3

Esto requiere que cargues el documento en un control de Winforms. – porges

+0

Corrígeme si me equivoco, pero esto requiere un control webBrowser y no permite el análisis directo de cadenas HTML. –

+0

@JellyAma, sí, pero ¿no es lo que parece que quieres en "modificar (e idealmente crear) atributos de esos elementos encontrados"? –

1

Suponiendo que usted está tratando con HTML bien formado, simplemente podría tratar el texto como un documento XML. El marco está cargado de funciones para hacer exactamente lo que estás pidiendo.

http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.aspx

+5

Intenta analizar esto * html * bien formado. ' line1' **
**' line2 ' –

+0

Pardon ... XHTML – Doug

0

Puedes ver cómo funciona HTML agilidad paquete, sin embargo, es .Net. Puede reflejar el ensamblaje y ver que está utilizando el MFC y podría reproducirse si lo desea, pero no haría nada más que mover el ensamblaje, no hacerlo más .Net.

+4

O puede obtener la fuente de Codeplex. http://htmlagilitypack.codeplex.com/ – Jimmy

+0

Muy cierto Jimmy. – John

1

Aparte de la agilidad del paquete de HTML y portar HtmlUnit a C#, lo que suena como soluciones sólidas son:

  • Lo más obvio - el uso de expresiones regulares. (System.Text.RegularExpressions)
  • Uso de un analizador XML. (porque HTML es un sistema de etiquetas, trátelo como un documento XML?)
  • ¿Linq?

Una cosa que sí sé es que analizar HTML como XML puede hacer que se encuentre con algunos problemas. XML y HTML no son lo mismo. Leer al respecto: here

Además, aquí es un post sobre Linq vs Regex.

+1

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 http://stackoverflow.com/questions/1732348/regex-match- open-tags-except-xhtml-self-contained-tags/1758162 # 1758162 –

Cuestiones relacionadas