Как прочитать список из XML-файла с помощью C #? (Проблема на основе XNA)

#c# #xml #list #xna

#c# #xml #Список #xna

Вопрос:

Я совсем новичок в XML и XNA и столкнулся с камнем преткновения, чтобы прочитать список, который я вывожу для хранения карты листов с множеством разных слоев

Мой XML выглядит так (просто образец):

 <XnaContent xmlns:Maps="TileEditorLibrary.Maps">
 <Asset Type="Maps:TileMap">
    <R>
      <Item>
        <C>
          <Item>
            <E>1</E>
            <ID>8</ID>
            <B>8</B>
            <H />
            <T />
          </Item>
          <Item>
            <E>1</E>
            <ID>8</ID>
            <B>8</B>
            <H />
            <T />
          </Item>
        </C>
      </Item>
    </R>
  </Asset>
</XnaContent>
  

Мой код для его чтения выглядит примерно так, но я не знаю, куда идти дальше:

 public void LoadContent(XDocument doc, TileMap myMap)
    {
        XDocument mapDoc = doc;
        TileMap map = myMap;

        foreach (XElement element in mapDoc.Element("R").Elements("Item").Elements("C"))
        {
             foreach (XElement mapValue in mapDoc.Element("Item").Elements())
                {
                    if (mapValue.Name.Equals("E"))
                    {
                    //do something
                    }
                    else if (mapValue.Name.Equals("ID"))
                    {
                    }
                    else if (mapValue.Name.Equals("B"))
                    {
                    }
                    else if (mapValue.Name.Equals("H"))
                    {
                    }
                    else if (mapValue.Name.Equals("T"))
                    {
                    }
                }
        }
    }
  

На данный момент я запускаю приложение, чтобы убедиться, что с документом все в порядке и он может анализировать информацию, но выдает нулевую ссылку на объект

Я прошу прощения, если это кажется довольно расплывчатым, но из-за моей неопытности в XML я не уверен, какая другая информация может помочь любому потенциальному консультанту

Если есть что-то еще, что может помочь, пожалуйста, спросите, и я постараюсь объяснить

Большое спасибо

Барри

Комментарии:

1. Какая строка выдает null object reference ошибку?

Ответ №1:

Что вам следует сделать, так это ознакомиться с сериализацией и десериализацией XML.
Таким образом, вы можете создать класс, который представляет XML, и десериализовать его напрямую без какого-либо синтаксического анализа XML.

Ее e — пример того, как это сделать.

Ответ №2:

Это может дать вам пищу для размышлений:

 public void LoadContent(XDocument doc, TileMap myMap)
{
    var lookup = new Dictionary<string, Action<string>>()
    {
        { "E", v => { Console.WriteLine("E  = "   v); } },
        { "ID", v => { Console.WriteLine("ID = "   v); } },
        { "B", v => { Console.WriteLine("B  = "   v); } },
        { "H", v => { Console.WriteLine("H  = "   v); } },
        { "T", v => { Console.WriteLine("T  = "   v); } },
    };

    var actions =
        from e in doc.Root
            .Element("Asset")
            .Element("R")
            .Elements("Item")
            .Elements("C")
        from mv in e
            .Elements("Item")
            .Elements()
        let name = mv.Name.ToString()
        let value = mv.Value
        select new Action(() => lookup[name](value));

    foreach (var a in actions)
        a.Invoke();
}
  

Комментарии:

1. Спасибо, надеюсь, теперь это можно отсортировать