-4

我有一个包含这部分 HTML 代码的网页:

<meta property="og:type" content="photo" />
    <meta property="og:description" content="descrizione">

    <meta property="og:site_name" content="Site_Name" />
    <meta property="og:title" content="" />
    <meta property="og:image" content="http://addfsfdbyhdfsifd.jpg" />
    <meta property="og:determiner" content="a" />
    <meta property="fb:app_id" content="124024574287414" />
    <meta property="og:url" content="http://addfsfdbyhdfsifd.com" />

如何选择 property="og:image" 的内容?我需要获取该链接才能在我的应用程序中显示它。

4

3 回答 3

3

使用HtmlAgilityPack

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

var props = doc.DocumentNode.Descendants("meta")
            .ToDictionary( m => m.Attributes["property"].Value,
                            m => m.Attributes["content"].Value);

Console.WriteLine(props["og:image"]);
于 2013-06-07T16:27:12.607 回答
1

这是做到这一点的万无一失的方法。

  1. 我不喜欢使用第三方库来解决小问题。顺便说一句,对敏捷包没有冒犯。它超级棒且强大。你永远不想自己解析 HTML。但这是一个很小的边缘案例!为什么要搞砸它?
  2. 您不能确定 HTML 是否会解析,因此您需要其他内容。XML 很诱人,但除非您 100% 肯定这是有效的 XHTML(现在什么都不是),否则最好不要追逐它。只需将其视为字符串解析练习。

什么最能解析字符串?正则表达式,就是这样。

这是您的解决方案:

var s = @"
<meta property=""og:type"" content=""photo"" />
<meta property=""og:description"" content=""descrizione"">
<meta property=""og:site_name"" content=""Site_Name"" />
<meta property=""og:title"" content="""" />
<meta property=""og:image"" content=""http://addfsfdbyhdfsifd.jpg"" />
<meta property=""og:determiner"" content=""a"" />
<meta property=""fb:app_id"" content=""124024574287414"" />
<meta property=""og:url"" content=""http://addfsfdbyhdfsifd.com"" />";

// first define what you will look for using regex pattern syntax
var p = @"meta\s{1,}property=""og:image""\s{1,}content=""(.+)""\s{0,}/>";

// second let the regex engine use your pattern against your html string
var m = System.Text.RegularExpressions.Regex.Match(s, p);

// third pull out just the part you want from the resulting match
var g = m.Groups[1];

// forth get the value from the meta tag, specifically the og:image you wanted
var i = g.Value;

是的,就是这么简单。Regex 也使它更可靠。

祝你好运!

于 2013-06-08T02:54:04.940 回答
0

设置 HtmlDocument 的代码:

var s = @"
<meta property=""og:type"" content=""photo"" />
<meta property=""og:description"" content=""descrizione"">

<meta property=""og:site_name"" content=""Site_Name"" />
<meta property=""og:title"" content="""" />
<meta property=""og:image"" content=""http://addfsfdbyhdfsifd.jpg"" />
<meta property=""og:determiner"" content=""a"" />
<meta property=""fb:app_id"" content=""124024574287414"" />
<meta property=""og:url"" content=""http://addfsfdbyhdfsifd.com"" />";

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(s);

找到节点,获取属性。

var node = doc.DocumentNode.SelectNodes("//meta[@property='og:image']").FirstOrDefault();

var content = node != null
    ? node.GetAttributeValue("content", string.Empty)
    : string.Empty;
于 2013-06-07T16:27:52.460 回答