我的朋友寫了這段XML代碼,在我們的遊戲簡單的測試,當談到加載和寫入保存數據。問題是他的代碼根本不起作用,而且我從未寫過任何XML代碼,所以這對我來說是新的,我決定學習XML。 所有它想要的是x和y值來創建一個新的Tile對象。 當運行代碼它給出了錯誤:GetElementByID.GetElementsByTagName返回null
System.NullReferenceException了未處理
的HResult = -2147467261
消息=對象不設置爲一個對象的一個實例參考。
TL; DR它加載簡單的瓷磚和所有它尋找的是x和y位置以後添加到在水平類訪問列表。
的代碼,他寫道:如下圖所示
<tiles>
<tile>
<position x="10" y="20" />
</tile>
<tile>
<position x="50" y="20" />
</tile>
<tile>
<position x="30" y="40" />
</tile>
</tiles>
public class XmlHandler
{
private List<Base.Tile> tiles;
public XmlHandler()
{
}
public void Load()
{
XmlDocument documentFile = new XmlDocument();
documentFile.Load(@"C:\Tiles\0.xml");
var listOfTiles = documentFile.GetElementById("tiles").GetElementsByTagName("tile");
foreach(XmlElement tile in listOfTiles)
{
var x = ((XmlElement)tile.GetElementsByTagName("position")[0]).GetAttribute("x");
var y = ((XmlElement)tile.GetElementsByTagName("position")[0]).GetAttribute("y");
Classes.Base.Tile t = new Base.Tile(new Vector2(float.Parse(x), float.Parse(y)));
this.tiles.Add(t);
}
}
public List<Base.Tile> GetTiles()
{
return this.tiles;
}
}
目前的XML文件,從原來的修改,這是原始的XML,我修改,因爲第一線造成的錯誤
<?xml encoding="utf-8"?>
<tiles>
<tile>
<id>1</id>
<position x="10" y="20" />
</tile>
<tile>
<id>2</id>
<position x="50" y="20" />
</tile>
<tile>
<id>3</id>
<position x="30" y="40" />
</tile>
</tiles>
感謝您的觀看/閱讀。任何幫助表示讚賞!
斯蒂法諾是正確的,但我會建議使用這種以文件的磚來代替: documentFile.SelectNodes(「//瓷磚「); 這將返回XML文件中稱爲tile的任何位置的XmlNode列表。它可以節省你必須得到瓷磚元素,然後從那裏獲取瓷磚。 –
不可能像這樣創建一個新的NodeList。 – Emily