HTMLAgilityPack SelezionareNodes per selezionare tutto <img> elementi

c# html html-agility-pack regex xpath

Domanda

Sto realizzando un progetto in C # che è fondamentalmente un raschia schermo per immagini per un gioco relativo alla ricerca di immagini. Sto cercando di utilizzare HTMLAgilityPack per selezionare tutti gli elementi dell'immagine e inserirli in un HTMLNodeCollection, come questo:

//set up for checking autos

HtmlNodeCollection imgs = new HtmlNodeCollection(doc.DocumentNode.ParentNode);
imgs = doc.DocumentNode.SelectNodes("//img");

foreach (HtmlNode img in imgs)
{
    HtmlAttribute src = img.Attributes["@src"];
    urls.Add(src.Value);
}

Nota che urls è una raccolta pubblica di elenchi:

//set up for checking autos

HtmlNodeCollection imgs = new HtmlNodeCollection(doc.DocumentNode.ParentNode);
imgs = doc.DocumentNode.SelectNodes("//img");

foreach (HtmlNode img in imgs)
{
    HtmlAttribute src = img.Attributes["@src"];
    urls.Add(src.Value);
}

Il mio ciclo foreach lancia un'eccezione:

Il riferimento non impostato su un'istanza di un oggetto.

Controllando le auto, abbastanza sicuro, imgs è nullo. C'è un modo migliore per rintracciare la fonte di questo problema? Non ho idea se sia il mio Xpath o cosa.

La parte più frustrante è che l'ho già fatto funzionare, ma ho incasinato le mie versioni di file e ho perso il mio lavoro. Derp.

Risposta accettata

Potresti avere un errore di battitura nella riga seguente:

HtmlAttribute src = img.Attributes["@src"];

Ho fatto in modo che funzioni per me (nota la posizione @):

HtmlAttribute src = img.Attributes["@src"];

Risposta popolare

Questo funziona per me. Penso che il tuo documento non sia stato caricato correttamente, quindi xpath non restituisce corrispondenze.

HtmlDocument htmlDocument = new HtmlDocument();
htmlDocument.LoadHtml("<html><head></head><body><div><img /><div><img /><img/></div></div><img/></body></html>");

var nodes = htmlDocument.DocumentNode.SelectNodes("//img");
// 4 nodes found
foreach (var node in nodes)
{
    // do stuff
}



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché