htmlagilitypack获取带有内容属性的元标记

时间:2017-01-04 00:31:38

标签: c# xamarin

我已经对此进行了很多搜索,但它确实没有用。我想获取元标记的content属性中的值。这是我的代码:

public string getTheImagesUrl(string url)
{
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(url);

    string xpath = "//meta[@property='og:image'";
    StringBuilder sb = new StringBuilder();
    foreach (HtmlNode node in doc.DocumentNode.Descendants(xpath))
    {
        sb.AppendLine(node.Attributes["content"].Value);
    }
    return sb.ToString();
}

这不会返回任何内容。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我无法使用HtmlAgilityPack,但这是一个使用AngleSharp

的工作示例
var config = Configuration.Default.WithDefaultLoader();
string address = "http://stackoverflow.com";

return (await BrowsingContext.New(config).OpenAsync(address))
    .DocumentElement.Descendents()
    .Where(x => x.NodeType == NodeType.Element)
    .OfType<IHtmlMetaElement>()
    .Where(x => x.Attributes["property"]?.Value == "og:image")
    .Select(x => x.Attributes["content"]?.Value)
    .FirstOrDefault();

答案 1 :(得分:0)

似乎您在查询选择器行中缺少右括号。您只需使用下面的简单代码即可完成所需的工作。

doc.DocumentNode.SelectSingleNode("//meta[@property='og:image']").GetAttributeValue("content", null);