2011-12-03 67 views
0

我正在開發一個Windows Phone 7.5應用程序,我迷路了。閱讀XML屬性和文本

我要讀下面的XML:

<?xml version="1.0" encoding="utf-8" ?> 
<cards> 
    <card id ="0"> 
    <name lang="en">Mad</name> 
    <description lang="en">This...</description> 
    </card> 
... 
</cards> 

而且我必須完成這段代碼:

private void UpdateCardDescriptions(int[] numbers, string lang) 
{ 
    for (int i = 0; i < numbers.Length; i++) 
    { 
     XmlReader reader = XmlReader.Create("Data/CardDescriptions.xml"); 

     reader.MoveToContent(); 

     while (reader.Read()) 
     { 
      if ((reader.NodeType == XmlNodeType.Element) && 
       (reader.Name == "card") && 
       (reader.GetAttribute("id").Equals(numbers[i].ToString()))) 
      { 
       string description = string.Empty; 
       while (reader.Read()) 
       { 

       } 

       switch (i) 
       { 
        case 0: 
         Card01Desc.Text = description; 
         break; 
        case 1: 
         Card02Desc.Text = description; 
         break; 
        case 2: 
         Card03Desc.Text = description; 
         break; 
       } 
      } 

      if (reader.NodeType == XmlNodeType.EndElement && reader.Name == "cards") 
      { 
       break; 
      } 
     } 

     reader.Close(); 
    } 
} 

我要完成這個代碼:

while (reader.Read()) 
{ 

} 

如果我正在尋找描述用語言,lang,對於卡w ith一個id。我怎樣才能得到相同的語言lang的相應描述。

對不起,我被封鎖了。

+0

你使用'XmlReader'而不是*更簡單的LINQ to XML API的任何原因? –

+0

是的,有一個原因:我是一個無知的人。 – VansFannel

回答

1

你用XElement,它的容易且被Windows Phone SDK廣泛支持。

private void UpdateCardDescriptions(int[] numbers, string lang) 
{ 
    XElement xe = XElement.Load(yourXml); 
    Control[] controls = new[] { Card01Desc, Card02Desc, Card03Desc }; 

    foreach(var number in numbers) 
    { 
     var card = xe.Desendants("card").Where(c => c.Attribute("id").Value == number) 
             .First(); 

     ((YourControlType)controls[number]).Text = card.Desendants("description") 
                .Where(c => c.Attribute("lang").Value == lang) 
                .First() 
                .Value; 
    } 
} 
+0

我無法檢查您的答案是否有效,因爲該代碼無法編譯並且語句不正確。 – VansFannel

+0

對不起,我拼寫'Descendants',我現在更新了代碼...另請注意,'(YourControlType)'是你正在使用的控件,即'TextBox' –

+0

在你的答案中,你忘記了語言:If我正在以**語言**,lang尋找具有ID的卡片的描述。 – VansFannel

3

還有一個更簡潔的方法:

XElement xmlCards = XElement.Parse(e.Result); 

var cards = from card in xmlCards.Descendants("card") 
select new CardItem 
{ 
    ID = card.Attribute("id").Value, 
    Name = card.Element("name").Value, 
    Desciption = card.Element("description").Value 
}; 

現在 '卡' 將包含所有你的卡

(CardItem只是你的卡實現)