¿Cómo capturar elementos por clase o id en HTML Source en C #?

c# html html-agility-pack parsing

Pregunta

Estoy tratando de capturar elementos de la fuente HTML en función de la clase o el nombre de identificación, usando la aplicación de formularios C # Windows. Estoy poniendo la fuente en una cadena usando WebClient y conectándola en el HTMLAgilityPack usando HtmlDocument.

Sin embargo, todos los ejemplos que encuentro con el paquete HTMLAgilityPack analizan y encuentran elementos basados ​​en etiquetas. Necesito encontrar una identificación específica, por ejemplo un enlace en el html, y recuperar el valor dentro de las etiquetas. ¿Es esto posible y cuál sería la forma más eficiente de hacerlo? Todo lo que estoy tratando de analizar las identificaciones me está dando excepciones. ¡Gracias!

Respuesta aceptada

Deberías poder hacer esto con XPath:

HtmlDocument doc = new HtmlDocument();
doc.Load(@"file.htm");

HtmlNode node = doc.DocumentNode.SelectSingleNode("//*[@id=\"my_control_id\"]");
string value = (node == null) ? "Error, id not found" : node.InnerHtml;

Explicación rápida de la xpath aquí:

  • // significa buscar en todas partes en la ruta, use SelectNodes si coincidirá con múltiplos
  • * significa coincidir con cualquier tipo de nodo
  • [] define "Predicados" que básicamente verifican las propiedades relativas a este nodo
  • [@id=\"my_control_id\"] significa encontrar nodos que tienen un atributo llamado "id" con el valor "my_control_id"

Referencia adicional



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué