使用Linq抓取XML时获取错误信息

时间:2010-07-04 19:13:16

标签: .net xml linq-to-xml

图片我有这个XML:

<ipb>
    <profile>
        <id>335389</id>
        <name>stapia.gutierrez</name>
        <rating>0</rating>
    </profile>
</ipb>

我正在尝试获取ID,名称和评级。有什么指导吗?

这是我拥有的和我收到的:

public User FindInformation()
{
  string xml = new WebClient().DownloadString(String.Format("http://www.dreamincode.net/forums/xml.php?showuser={0}", userID));
  XDocument doc = XDocument.Parse(xml);

  var id = from u in doc.Descendants("profile")
                 select (string)u.Element("id");

  var name = from u in doc.Descendants("profile")
                 select (string)u.Element("name");

  var rating = from u in doc.Descendants("profile")
                 select (string)u.Element("rating");

  User user = new User();
  user.ID = id.ToString();
  user.Name = name.ToString();
  user.Rating = rating.ToString();

  return user;
}

这是我在TextBox中进行测试的目的。

System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String] System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String] System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String]

2 个答案:

答案 0 :(得分:1)

您需要提取<profile>的单个实例,然后对其进行操作:

XDocument doc = XDocument.Parse(xml);

foreach(var profile in doc.Descendants("profile"))
{
   var id = profile.Element("id").Value;
   var name = profile.Element("name").Value;
   var rating = profile.Element("rating").Value;

   User user = new User();
   user.ID = id;
   user.Name = name;
   user.Rating = rating;
}

你现在正在做的是选择一个节点列表(doc.Descendants("profile")将返回一个节点列表,可能只有一个元素 - 但仍然是一个列表),然后是内部的所有“id”元素那个清单......我猜不是你想要的!

答案 1 :(得分:0)

var id = from u in doc.Descendants("profile")
select (string)u.Element("id");

这&amp;像这样的其他陈述将返回一个可枚举的&amp;不是具体的例子。 即如果您的xml有许多满足条件的节点会发生什么?

因此,如果您希望获得第一个项目(或者如果您的xml结构完全如上所示,没有额外的节点),则对FirstFirstOrDefault的调用应有所帮助。< / p>