2012-07-10 9 views
5

Piszę trochę Download-Roboter, czyli szukam linków w niższych warstwach.Wybierz elementy z danymi atrybutowymi-url przy użyciu HTMLAgilityPack

Co muszę znaleźć wszystkie linki są w html strony (linki do plików .jpg, a także linki do .pgn, .pdf, .html, .... - pliki)

Używam html-agilitypack, aby znaleźć wszystkie linki a-href.

Przykładowy kod:

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

ale chcę znaleźć zbiór danych adresów URL, jak również.

Jakiej składni XPath muszę użyć, aby znaleźć adresy danych. Przykładem danych url w htmlcode:

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

muszę "2012 \ Edmonton \ partien.pgn" z tego przykładu. Jak mogę to zrozumieć za pomocą składni XPath?

Pozdrowienia, jeśli popełniłem kilka złych błędów, powiedz mi. To moje pierwsze pytanie.

Odpowiedz

11

Poniższa powinien robić to, co chcesz:

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

Skutecznie, oświadczenie //div[@data-url] należy wybrać wszystkie węzły z atrybutem data-url. Następnie wyciągamy ten atrybut.

Jeśli istnieją węzły inne niż divy o tym atrybucie, to powinno wystarczyć narzędzie //*[@data-url].

+0

wielkie dzięki, działa idealnie. –

+2

może być bardziej elastyczne używanie '*' zamiast 'div' -' "// * [@ data-url]" '. Ci darnowi autorzy html ciągle zmieniają swój html! – user3791372

Powiązane problemy