Frage

Ich versuche, die HtmlAgilityPack Bibliothek verwenden einige Links in einer Seite zu analysieren, aber ich bin nicht sehen die Ergebnisse, die ich von den Methoden erwarten. Im Folgenden habe ich eine HtmlNodeCollection von Links. Für jede Verbindung möchte ich überprüfen, ob ein Bild Knoten ist und dann seine attribures analysieren, aber die Select und SelectSingleNode Methoden der linkNode das übergeordnete Dokument nicht auf der Suche die childnodes von linkNode zu sein scheint, was gibt?

HtmlDocument htmldoc = new HtmlDocument();
htmldoc.LoadHtml(content);
HtmlNodeCollection linkNodes = htmldoc.DocumentNode.SelectNodes("//a[@href]");

foreach(HtmlNode linkNode in linkNodes)
{
    string linkTitle = linkNode.GetAttributeValue("title", string.Empty);
    if (linkTitle == string.Empty)
    {
        HtmlNode imageNode = linkNode.SelectSingleNode("/img[@alt]");     
    }
}

Gibt es eine andere Art, wie ich das alt-Attribut des Bildes childNode von linkNode bekommen könnte, wenn es vorhanden ist?

War es hilfreich?

Lösung

Sie sollten den forwardslash Präfix von „/ img [@alt]“ entfernen, da es bedeutet, dass Sie an der Wurzel des Dokuments beginnen sollen.

HtmlNode imageNode = linkNode.SelectSingleNode("img[@alt]");

Andere Tipps

Mit einer XPath-Abfrage Sie auch verwenden können „“ um anzuzeigen, sollte die Suche am aktuellen Knoten starten.

HtmlNode imageNode = linkNode.SelectSingleNode(".//img[@alt]");

Auch Achten Sie auf Null Check-out. Select null zurück, anstatt leerer Sammlung.

HtmlNodeCollection linkNodes = htmldoc.DocumentNode.SelectNodes("//a[@href]");

**if(linkNodes!=null)**
{
   foreach(HtmlNode linkNode in linkNodes)
  {
     string linkTitle = linkNode.GetAttributeValue("title", string.Empty);
     if (linkTitle == string.Empty)
     {
       **HtmlNode imageNode = linkNode.SelectSingleNode("img[@alt]");**   
     }
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top