2012-05-14 110 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