C#-使用Linq选择XML的问题

C#-使用Linq选择XML的问题,c#,xml,linq,windows-phone-7,C#,Xml,Linq,Windows Phone 7,我试图提取XML中的事件描述,但访问数据时遇到问题 我正在尝试访问eventDetailsValue元素 以下是我的代码示例: (第1版) (第2版) 我为不同的元素尝试了以下方法,效果很好: GeoLat = Convert.ToDouble(doc.Element("latitude").Value); 以下是xml结果的示例(为了简单起见,我删除了这些值): - - - - - - - - - - 任何帮助都将不胜感激 尝试此查询: var xGood = fro

我试图提取XML中的事件描述,但访问数据时遇到问题

我正在尝试访问eventDetailsValue元素

以下是我的代码示例:

(第1版)

(第2版)

我为不同的元素尝试了以下方法,效果很好:

GeoLat = Convert.ToDouble(doc.Element("latitude").Value);
以下是xml结果的示例(为了简单起见,我删除了这些值):


- 
- 
- 
- 
- 
- 
- 
- 
- 
- 
任何帮助都将不胜感激

尝试此查询:

var xGood = from detaildoc in doc.Descendants("eventDetails")
select new 
{
Value = detaildoc.Elements("eventDetail").Elements("eventDetailsValue").Value
};

eventDetailsValue位于eventDetail元素数组中。因此,需要区分数组中需要的元素。有了这个(以及这些LinqToXml扩展:),您可以这样编写它:

XElement doc = XElement.Parse(e.Result);
var details = doc.GetEnumerable("eventDetails/eventDetail", x => new
{
    Name = x.Get("eventDetailsName", string.Empty),
    Order = x.Get("eventDetailsOrder", string.Empty),
    Value = x.Get("eventDetailsValue", string.Empty)
});
foreach(var detail in details)
{
    string value = detail.Value;
}
details
是一个包含名称、顺序和所需值的
IEnumerable
。现在,您可以循环查看详细信息并获得所需的值。我将名称、顺序和值都设置为字符串,但通过调用
Get(“Name”,defaultValueByType)
可以将它们设置为其他类型

您可以这样循环它们:

XElement doc = XElement.Parse(e.Result);
var details = doc.GetEnumerable("eventDetails/eventDetail", x => new
{
    Name = x.Get("eventDetailsName", string.Empty),
    Order = x.Get("eventDetailsOrder", string.Empty),
    Value = x.Get("eventDetailsValue", string.Empty)
});
foreach(var detail in details)
{
    string value = detail.Value;
}
GetEnumerable(在本例中)是以下内容的简写:

但是它会为您执行空检查,如果您的xml总是生成上面的xml,那么长时间进行检查是没有问题的。和Get返回正确的值


注意:因为这是一个
WindowsPhone7
项目,您必须将编译器标志设置为
WindowsPhone7
,以便扩展可以毫无怨言地编译(希望/I没有测试过它)。

我尝试了以下代码,但它不理解“getenumerable”doc.getenumerable XElement doc=XElement.Parse(e.Result)的部分;var details=doc.GetEnumerable(“eventDetails/eventDetail”,x=>new{Name=x.Get(“eventDetailsName”,string.Empty),Order=x.Get(“eventDetailsOrder”,string.Empty),Value=x.Get(“eventDetailsValue”,string.Empty”);您是否从链接下载了XelementTextensions.cs文件并将其添加到您的项目中?然后需要使用XmlLib放置一个
位于文件顶部。
foreach(var detail in details)
{
    string value = detail.Value;
}
doc.Element("eventDetails").Elements("eventDetail").Select(x => new ...)