Чтение атрибутов XML и текста - PullRequest
0 голосов
/ 03 декабря 2011

Я разрабатываю приложение для Windows Phone 7.5, и я потерян.

Я должен прочитать следующий 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, длякарточка с идентификатором.Как я могу получить соответствующее описание для того же языка, язык.

Извините, я заблокирован.

Ответы [ 2 ]

3 голосов
/ 03 декабря 2011

Существует более элегантный подход:

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 - просто реализация вашей карточки)

1 голос
/ 03 декабря 2011

Использовали ли вы 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...