XDocument - 获取节点值列表

时间:2012-08-05 08:51:49

标签: silverlight linq-to-xml

我有一个像这样的XDocument:

<LookupList>
 <ImageInfo1>
  <FieldID>1057</FieldID> 
  <FieldName>Lookup_test</FieldName> 
  <LookupText>open</LookupText> 
 </ImageInfo1>
 <ImageInfo1>
  <FieldID>1057</FieldID> 
  <FieldName>Lookup_test</FieldName> 
  <LookupText>Waiting for input</LookupText> 
 </ImageInfo1>
 <ImageInfo1>
  <FieldID>1057</FieldID> 
  <FieldName>Lookup_NEW_NAME</FieldName> 
  <LookupText>Closed</LookupText> 
 </ImageInfo1>
</LookupList>

我想要

  1. 唯一FieldName(s)和
  2. 的数量和值
  3. 每个FieldName的LookupText列表。
  4. 有人能给我一个如何去做的提示吗?

1 个答案:

答案 0 :(得分:3)

首先,您需要知道如何从XDocument中读取元素:

public void ReadXDocument(XDocument doc)
{
    foreach (XElement el in doc.Descendants("ImageInfo1"))
    {
        string fieldid = el.Element("FieldID").Value;
        string fieldName = el.Element("FieldName").Value;
        string lookupText = el.Element("LookupText").Value;
    }

一旦你知道,使用Linq实现你的目标是相对直接的。

这应该为您提供一个不同的FieldNames列表:

    List<String> distinctNames = doc.Descendants("ImageInfo1")
                 .Select(o => o.Element("FieldName").Value)
                 .Distinct().ToList();

这应该为每个FieldName

提供一组LookupText值
    IEnumerable groups = doc.Descendants("ImageInfo1")
                 .GroupBy(o => o.Element("FieldName").Value)
                 .Select(o => new { Key = o.Key, Lookups = o.ToList() });
}