如何在Windows 8中使用c#解析字符串?

时间:2013-06-07 16:20:21

标签: c# html windows-8 windows-store-apps winrt-xaml

我的网页上有这部分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" />

如何选择属性的内容=&#34; og:image&#34;?我需要获取该链接以在我的应用中显示它。

3 个答案:

答案 0 :(得分: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"]);

答案 1 :(得分:1)

这是不失败的方式。

  1. 我不是第三方图书馆的粉丝来解决一个小问题。顺便说一句,敏捷包没有冒犯。它超级强大。您永远不想自己解析HTML。但这是一个小小的边缘案例!为什么搞这个?
  2. 您无法确定HTML是否会解析,因此您需要其他内容。 XML是诱人的,但除非你是100%肯定的,否则这是有效的XHTML(实际上已经没有了),最好不要追逐它。只需将其视为字符串解析练习。
  3. 什么解析字符串最好? Regular Expressions,就是这样。

    这是你的解决方案:

    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也使它更可靠。

    祝你好运!

答案 2 :(得分: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;