2012-05-14 6 views
1

У меня есть следующие XML:LinqToXml: синтаксический и верстку

<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 

l в содержании - level переменная.

Спасибо.

ответ

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; 
+0

+1 Вы забыли конечную точку с запятой, но кроме этого она выглядит хорошо. – dasblinkenlight

+0

Спасибо, добавили. – yamen

+0

Он по-прежнему отсутствует в образце вывода: – dasblinkenlight