Die HTML-Quelle ist wie folgt
<img id="itemImage" src="https://www.xyz.com/item1.jpg">
Ich verwende die folgende LINQ-Abfrage, um den SRC-Wert zu erhalten (Image Link)
string imageURL = document.DocumentNode.Descendants("img")
.Where(node => node.Attributes["id"] != null && node.Attributes["id"].Value == "itemImage")
.Select(node => node.Attributes["src"].Value).ToString();
Aber die imageURL gibt Ausgabe als
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[HtmlAgilityPack.HtmlNode,System.String]
Das Problem besteht darin, es in eine Zeichenfolge umzuwandeln. Select()
gibt IEnumerable<T>
so dass Sie im Grunde einen Enumerator in eine Zeichenfolge konvertieren (wie die Fehlermeldung sagt). Rufen Sie First()
oder Single()
oder Take(1)
auf, um ein einzelnes Element zu erhalten, bevor Sie es in einen String umwandeln.
.Select(node => node.Attributes["src"].Value).First().ToString();
Wenn die Wahrscheinlichkeit besteht, dass das gewünschte Element nicht vorhanden ist, gibt FirstOrDefault()
und SingleOrDefault()
null zurück, statt eine Ausnahme SingleOrDefault()
. In diesem Fall würde ich empfehlen
var imageUlr = ... .Select(node => node.Attributes["src"].Value).FirstOrDefault();
if (imageUrl != null)
{
// cast it to string and do something with it
}
Fügen Sie .DefaultIfEmpty (string.Empty) .FirstOrDefault hinzu
string imageURL = document.DocumentNode.Descendants("img")
.Where(node => node.Attributes["id"] != null && node.Attributes["id"].Value == "itemImage")
.Select(node => node.Attributes["src"].Value)
.DefaultIfEmpty(string.Empty)
.FirstOrDefault()
.ToString();