【发布时间】:2016-05-20 06:52:57
【问题描述】:
我有一个 XML 数据库(定制的),我正在尝试将其加载到 Unity3D 中。
我有一个公共 TextAsset,我在检查器中分配它以等于我的 XML 数据库。
当我运行我的脚本时,它会在 XMLDocument.loadxml() 线上抛出 NullReferenceException。
当我对此进行简化并仅使用 XML 格式的简单字符串并将其更改为 XMLDocument.Load() (具有相同的标签和数据)时,它就可以工作了。不过,这对于写作来说远远不够理想。
public TextAsset enemyXML;
This one works--> //public string enemyXml = "<Enemy><EnemyName> Scale </EnemyName><EnemyID> 001 </EnemyID><EnemySpriteTag> Scale </EnemySpriteTag><EnemyBrawn>8 </EnemyBrawn><EnemyBrisk> 8 </EnemyBrisk><EnemyBrains>8</EnemyBrains> <EnemyBravery> 10 </EnemyBravery><EnemyAbilitySet1> Scale </EnemyAbilitySet1> <EnemyAbilitySet2> None </EnemyAbilitySet2><EnemyAbilitySet3> None </EnemyAbilitySet3> <EnemyAbilitySet4> None </EnemyAbilitySet4></Enemy>";
XmlDocument xmlDoc = new XmlDocument();
This one works--> //xmlDoc.Load(new StringReader(enemyXml));
xmlDoc.LoadXml(enemyXml.text);
XmlNodeList enemyList = xmlDoc.GetElementsByTagName("Enemy");
foreach (XmlNode enemyInfo in enemyList)
{
XmlNodeList EnemyContent = enemyInfo.ChildNodes;
enemyDictionary = new Dictionary<string, string>(); //in Items tag, first tag, text associated with
foreach (XmlNode content in EnemyContent)
{
switch(content.Name)//must contain all things for each item
{
case "EnemyName":
enemyDictionary.Add("EnemyName", content.InnerText);
break;
case "EnemyID":
enemyDictionary.Add("EnemyID", content.InnerText);
break;
case "EnemySpriteTag":
enemyDictionary.Add("EnemySpriteTag", content.InnerText);
break;
case "EnemyBrawn":
enemyDictionary.Add("EnemyBrawn", content.InnerText);
break;
case "EnemyBrisk":
enemyDictionary.Add("EnemyBrisk", content.InnerText);
break;
case "EnemyBrains":
enemyDictionary.Add("EnemyBrains", content.InnerText);
break;
case "EnemyBravery":
enemyDictionary.Add("EnemyBravery", content.InnerText);
break;
case "EnemyAbilitySet1":
enemyDictionary.Add("EnemyAbilitySet1", content.InnerText);
break;
case "EnemyAbilitySet2":
enemyDictionary.Add("EnemyAbilitySet2", content.InnerText);
break;
case "EnemyAbilitySet3":
enemyDictionary.Add("EnemyAbilitySet3", content.InnerText);
break;
case "EnemyAbilitySet4":
enemyDictionary.Add("EnemyAbilitySet4", content.InnerText);
break;
}
}
EnemyDictionList.Add(enemyDictionary);
}
这就是我能想到的所有相关代码。 自定义 XML 文件被包裹在上面的字符串被推到中间。 我只是缺少拼写还是什么?这几天我一直很迷茫,也没有找到运气。
如果需要在编辑中,我可以包含类 BaseEnemy。
编辑: 这也适用于我的其余代码。
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Path.Combine(Application.dataPath,"RPGEnemyDatabase.xml"));
但是,尝试在检查器中分配它,或者尝试说enemyXML.text,并没有。
【问题讨论】:
标签: xml unity3d xml-parsing