Consulta XPATH, HtmlAgilityPack y extracción de texto

c# html html-agility-pack xpath

Pregunta

Había estado tratando de extraer enlaces de una clase llamada "tim_new". También me han dado una solución.

La solución, el fragmento y la información necesaria se dan aquí.

Dicha consulta XPATH fue "//a[@class='tim_new'] , mi pregunta es, ¿cómo esta consulta diferencia entre la primera línea del fragmento (que se encuentra en el enlace de arriba y la segunda línea del fragmento)?

Más específicamente, ¿cuál es la traducción literal (en inglés) de esta consulta XPATH?


Además, quiero escribir algunas líneas de código para extraer el texto escrito en contra de NSE:

<div class="FL gL_12 PL10 PT15">BSE: 523395 &nbsp;&nbsp;|&nbsp;&nbsp; NSE: 3MINDIA &nbsp;&nbsp;|&nbsp;&nbsp; ISIN: INE470A01017</div>

Agradecería ayuda en la formación de la consulta de selección necesaria.

Mi código está escrito como:

IEnumerable<string> NSECODE = doc.DocumentNode.SelectSingleNode("//div[@NSE:]");

Pero esto no se ve bien. Apreciaría alguna ayuda.

Respuesta popular

La XPath en la primera selección dice "seleccionar todos los elementos del documento que tienen un atributo llamado clase con un valor de tim_new". Lo que está entre paréntesis no es lo que está devolviendo, es el criterio que está aplicando a la búsqueda.

No tengo el paquete de agilidad HTML, pero si está intentando consultar los divs que tienen "NSE:" como texto, su XPath para la segunda consulta debería ser simplemente "// div", entonces querrá filtrar utilizando LINQ.

Algo como

var nodes = 
    doc.DocumentNode.SelectNodes("//div[text()]").Where(a => a.InnerText.IndexOf("NSE:") > -1);

Entonces, en inglés, "Devuelva todos los elementos div que contienen inmediatamente texto a LINQ, luego verifique que el valor del texto interno contenga NSE:". Una vez más, no estoy seguro de que la sintaxis sea perfecta, pero esa es la idea.

La XPath "// div [@NSE:]" devolvería todos los divs que tienen un atributo llamado NSE :, lo cual sería ilegal de todos modos porque ":" no está permitido en un nombre de atributo. Estás buscando el texto del elemento, no uno de sus atributos.

Espero que ayude.'

Nota: si tiene divs anidados que contienen texto como en <div>NSE: some text<div>NSE: more text</div></div> , obtendrá resultados duplicados.



Related

Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow