Linq To Xml:解析和格式化

时间:2012-05-14 12:11:39

标签: c# linq

我有以下xml:

<Places Count='50'>
<Place ID='1' Row='1' Place='1' Status='10' Fragment='0'></Place>
<Place ID='2' Row='1' Place='2' Status='10' Fragment='0'></Place>
<Place ID='3' Row='1' Place='3' Status='10' Fragment='0'></Place>
<Place ID='4' Row='1' Place='4' Status='10' Fragment='0'></Place>
//other tags
</Places>

这是我的方法:

public static List<string> ParseFreePlace(string response, string level)
{
   if (string.IsNullOrWhiteSpace(response)) return new List<string>();

   return XDocument.Parse(response).Descendants("Place")
         .Select(element => (string) element.Attribute("Row")).ToList();
}

我希望List<string>获得以下内容:

r=1;p=1;f=0;l=54; // 0 element in the List
r=1;p=2;f=0;l=54; // 1 element in the List
r=1;p=3;f=0;l=54; // 2 element in the List
r=1;p=4;f=0;l=54; // 3 element in the List

内容中的llevel变量。

感谢。

1 个答案:

答案 0 :(得分:2)

请改为尝试:

public static List<string> ParseFreePlace(string response, string level)
{
   if (string.IsNullOrWhiteSpace(response)) return new List<string>();

   return 
        XDocument.Parse(response)
                 .Descendants("Place")
                 .Select(e =>
                    String.Format("r={0};p={1};f={2};l={3};",
                                   e.Attribute("Row").Value,
                                   e.Attribute("Place").Value,
                                   e.Attribute("Fragment").Value,
                                   level)
                 ).ToList();
}

当这样调用时(假设input是XML字符串):

var lines = ParseFreePlace(input, "54");
foreach (var line in lines) Console.WriteLine(line);

它为我返回:

r=1;p=1;f=0;l=54;
r=1;p=2;f=0;l=54;
r=1;p=3;f=0;l=54;
r=1;p=4;f=0;l=54;