Как прочитать список <> из файла XML с помощью C #?(Проблема на основе XNA) - PullRequest
0 голосов
/ 25 октября 2011

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

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

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

Barry

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

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

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

1 голос
/ 25 октября 2011

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

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