X文档,C#中的后代

时间:2013-06-26 09:11:26

标签: c# xml linq

我有以下代码来获取alexa页面排名。

private int GetAlexaRank(string domain)
{
    var alexaRank = 0;
    try
    {
        var url = string.Format("http://data.alexa.com/data?cli=10&dat=snbamz&url={0}", domain);

        var doc = XDocument.Load(url);

        var rank = doc.Descendants("POPULARITY").Select(node => node.Attribute("TEXT").Value).FirstOrDefault();

        if (!int.TryParse(rank, out alexaRank))
            alexaRank = -1;

    }
    catch (Exception e)
    {
        return -1;
    }

    return alexaRank;
}

但我真的不明白该代码是如何工作的??? 你能准确地告诉我,"POPULARITY""TEXT"是什么?它们存放在哪里? 我不明白这种语法:doc.Descendants("POPULARITY").Select(node => node.Attribute("TEXT").Value).FirstOrDefault(); 请!!!!

1 个答案:

答案 0 :(得分:0)

我建议您导航到代码中的url,然后查看XML文件结构。您应该会看到包含POPULARITYTEXT的标记,通过代码的外观,这些是您选择的节点/属性/值。

.Descendants会返回一个集合,因为您提供了POPULARITY,它会带回XML文件中<POPULARITY>标记内的元素。

然后,您正在查看其后代为Collection的{​​{1}}中的每个节点,并选择属性为Popularity的项目。返回找到的第一个值,如果集合不包含属性为TEXT的节点,则返回null。