2012-07-10 18 views
5

Estoy escribiendo un poco Download-Roboter, que es la búsqueda de enlaces en capas inferiores para si mismo.Seleccionar elementos con el atributo de datos de URL usando HTMLAgilityPack

lo que tengo que encontrar son todos los enlaces en una página HTML (los enlaces a los archivos .jpg, así como los enlaces a .pgn, .pdf, .html, .... - archivos)

Estoy usando html-agilitypack para encontrar todos los enlaces a-href.

Código de ejemplo:

foreach (HtmlNode link in htmlDocument.DocumentNode.SelectNodes("//a[@href]")) 
{ 
    HtmlAttribute attribute = link.Attributes["href"]; 
    links.Add(attribute.Value); 
} 

pero quiero encontrar la ficha direcciones URL también.

¿Qué sintaxis XPath tengo que usar para buscar direcciones de datos? Un ejemplo de datos de URL en un HTMLCode:

<div class="cbreplay" data-url="2012\edmonton\partien.pgn"></div> 

necesito el "2012 \ Edmonton \ partien.pgn" fuera de este ejemplo. ¿Cómo puedo darme cuenta de esto con la sintaxis de XPath?

mejores saludos, si he cometido algunos errores graves, me dicen. Esta es mi primera pregunta.

Respuesta

11

Lo siguiente debe hacer lo que quiera:

foreach (HtmlNode divNode in htmlDocument.DocumentNode.SelectNodes("//div[@data-url]")) 
{ 
    HtmlAttribute attribute = divNode.Attributes["data-url"]; 
    links.Add(attribute.Value); 
} 

En efecto, la declaración //div[@data-url] debe seleccionar todos los nodos con un atributo url de datos. Luego sacamos este atributo.

Si hay nodos que no sean divs con este atributo, entonces //*[@data-url] debería hacer el truco.

+0

Muchas gracias, su trabajo perfectamente. –

+2

puede ser más flexible usar '*' en lugar de 'div' -' "// * [@ data-url]" '. Esos malditos autores html siguen cambiando su html! – user3791372

Cuestiones relacionadas