Итак, я пытаюсь проанализировать XML-документ на C# с помощью класса XmlDocument. До сих пор я успешно загружал данные из первого узла, называемого <map>
.Анализ XML с XmlDocument
public void read()
{
XmlDocument doc = new XmlDocument();
doc.Load("C:\\map.xml");
parseMap(doc);
}
private void parseDoc(XmlDocument doc)
{
XmlNode map = doc.DocumentElement.SelectSingleNode("/map");
int mapWidth = Convert.ToInt16(map.Attributes["width"].InnerText);
int mapHeight = Convert.ToInt16(map.Attributes["height"].InnerText);
int tileWidth = Convert.ToInt16(map.Attributes["tilewidth"].InnerText);
int tileHeight = Convert.ToInt16(map.Attributes["tileheight"].InnerText);
Console.Write("Map width: " + mapWidth + "\nMap height: " + mapHeight +
"\nTile width: " + tileWidth + "\nTile height: " + tileHeight);
int tilesetsCount = map.SelectNodes("tileset").Count;
Console.Write("\nAmount of tilesets: " + tilesetsCount);
foreach (XmlNode tileset in map.ChildNodes)
{
int firstgid = Convert.ToInt16(tileset.Attributes["firstgid"].InnerText);
string name = tileset.Attributes["name"].InnerText;
int tilesetTileWidth = Convert.ToInt16(tileset.Attributes["tilewidth"].InnerText);
int tilesetTileHeight = Convert.ToInt16(tileset.Attributes["tileheight"].InnerText);
foreach(XmlNode image in tileset.ChildNodes)
{
imageWidth = Convert.ToInt16(image.Attributes["width"].InnerText);
imageHeight = Convert.ToInt16(image.Attributes["height"].InnerText);
}
List<Tileset> tilesetList = new List<Tileset>();
tilesetList.Add(new Tileset(firstgid, name, tilesetTileWidth, tilesetTileHeight,
imageWidth, imageHeight));
}
}
Но я столкнулся с проблемой, мой XML документ будет включать в себя несколько <tileset>
тегов; поэтому логически я пришел к выводу, что мне нужно сделать цикл (первый).
Когда я пытаюсь выполнить компиляцию и запуск кода, визуальные студии сообщают мне, что «Исключение NullReferenceException было необработанным», указывая на первую строку внутри цикла foreach.
Так что же здесь происходит?
Edit1: Я не мог BLOCKQUOTE мой XML, так что я положил его на Pastebin: http://pastebin.com/qW967heQ
Edit2: В ответ на использовании LINQ; Я попробовал, но только что закончил с тем, что я не смог получить доступ к данным, полученным из XML, так как я уверен, что мог бы его зарегистрировать с обычным тегом {0}, но я не мог присвоить значение переменной. Я не слишком опытный, поэтому я сожалею, если мне кажется, что что-то не хватает.
положить XML, чтобы помочь вам –
Трудно сказать, что случилось с вашим кодом, не видя данные, которые вы пытаетесь разобрать –
Какой 'foreach' цикл? У вас двое. Кроме того, у вас есть * для использования 'XmlDocument'? LINQ to XML намного проще. Если вы можете опубликовать образец XML и исправить форматирование кода, что тоже поможет. –