0
<myDocument>
    <country code="US">
        <region code="CA">
            <city code="Los Angeles">
                <value>a</value>
                <value>b</value>
                <value>c</value>
            </city>
            <city>
                ...
            </city>
        </region>
        <region>
            ...
        </region>
    </country>
    ...
</myDocument>

最後に、一意の「値」(a、b、c など) のリストと、その値が表示されるすべての場所を示す countryCode、regionCode、cityCode のリストを作成したいと考えています。この種の選択は、LINQ to XML を使用してどのように行うのでしょうか?

Result
======
Key : a
Value : List of country/region/city codes
    US, CA, Los Angeles
    US, CA, San Fransisco
    US, AL, Hatford

Key : b
    etc
4

1 に答える 1

2

これがどのようになるかです:

var grouped = from country in doc.Elements("country")
              from region in country.Elements("region")
              from city in region.Elements("city")
              from value in city.Elements("value")

              group value by new
              {
                   Value = value.Value,
                   Country = country.Attribute("code").Value,
                   Region = region.Attribute("code").Value,
                   City = city.Attribute("code").Value
              };

Dictionary<string, List<Tuple<string, string, string>>> dic = (from grouping in grouped
select new KeyValuePair<string, List<Tuple<string, string, string>>>(
     grouping.Key.Value,
     (from occurence in grouping 
      select new Tuple<string, string, string>(
          grouping.Key.Country, 
          grouping.Key.Region, 
          grouping.Key.City)
      ).ToList()))
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

それはそれを行います。お尻の痛みは、それを適切にフォーマットします。それが役立つことを願っています。キーが値で、値がすべての値の出現の国、地域、都市を含むタプルのリストであるディクショナリを作成します。

于 2013-04-11T17:21:42.413 に答える