通過LINQ獲取屬性值

getelementbyid html-agility-pack linq

HTML源代碼如下

<img id="itemImage" src="https://www.xyz.com/item1.jpg">

我使用以下LINQ查詢來獲取SRC值(圖像鏈接)

string imageURL = document.DocumentNode.Descendants("img")
                    .Where(node => node.Attributes["id"] != null && node.Attributes["id"].Value == "itemImage")
                    .Select(node => node.Attributes["src"].Value).ToString();

但是imageURL給出了輸出

System.Linq.Enumerable+WhereSelectEnumerableIterator`2[HtmlAgilityPack.HtmlNode,System.String]

一般承認的答案

問題是將其轉換為字符串。 Select()返回IEnumerable<T>因此您基本上將枚舉器轉換為字符串(如錯誤消息所示)。調用First()Single()Take(1)以獲取單個元素,然後再將其轉換為字符串。

.Select(node => node.Attributes["src"].Value).First().ToString();

此外,如果有可能不存在所需元素,則FirstOrDefault()SingleOrDefault()將返回null,而不是拋出異常。在那種情況下,我會建議

var imageUlr = ... .Select(node => node.Attributes["src"].Value).FirstOrDefault();
if (imageUrl != null)
{
    // cast it to string and do something with it
}

熱門答案

添加.DefaultIfEmpty(string.Empty).FirstOrDefault

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();


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow