图片我有这个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]
答案 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结构完全如上所示,没有额外的节点),则对First
或FirstOrDefault
的调用应有所帮助。< / p>