#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. Спасибо, надеюсь, теперь это можно отсортировать