TL; DR版本:如何读取属于子元素子元素的XML文件中的属性?读取文件中的所有属性(也是嵌套的)
我有一个XML文件,其中包含各种项目的数据。
的XML文件是这样的:
<items>
<item name="Item 1" value="10" weight="3.0">
<mods healthMod="0" staminaMod="0" manaMod="0"></mods>
</item>
<item name="Item 2" value="20" weight="5.0">
<mods healthMod="10" staminaMod="0" manaMod="0"></mods>
</item>
</items>
所以,你可以看到,该项目“基本节点”有样的价值和重量属性。还有一个包含healthMod,staminaMod和manaMod等属性的子元素。
我已经创建了一个类将保存并行化数据:
[System.Serializable]
[XmlRoot("items")]
public class ItemDirectory {
[XmlElement("item")]
public Item[] items;
}
我可以成功地读取所有元素,并从与该码本项目基节点属性:
Dictionary<string,Item> itemDictionary;
public static void FillItemDictionary() {
itemDictionary = new Dictionary<string,Item>();
item = new Item();
string path = "C:/items.xml";
var xmlSerializer = new XmlSerializer(typeof(ItemDirectory));
var stream = File.Open(path, FileMode.Open);
var deserializedItems = xmlSerializer.Deserialize(stream) as ItemDirectory;
stream.Close();
for(int i = 0; i < deserializedItems.items.Length; i++) {
Item itemCur = deserializedItems.items[i];
itemDictionary.Add (itemCur.name, itemCur);
//Debug.Log("Item " + i + " name: " + itemCur.name + " Value: " + itemCur.value);
//Debug.Log(itemDictionary["Item 1"].value);
}
}
由此,读取XML文件中的项目并使用Item类将它们分配给项目的字典:
[System.Serializable]
public class Item {
[XmlAttribute("name")]
public string name = "";
[XmlAttribute("type")]
public string type;
[XmlAttribute("value")]
public int value = 0;
[XmlAttribute("weight")]
public float weight = 0.0f;
//mods
[XmlAttribute("healthMod")]
public int healthMod = 0;
[XmlAttribute("staminaMod")]
public int staminaMod = 0;
[XmlAttribute("manaMod")]
public int manaMod = 0;
}
但是,这看起来不会读取和/或分配“mods”元素内的嵌套属性:healthMod,staminaMod,manaMod。我该怎么做呢?
我发现的线程都是关于PHP或者使用了XMLElement.Load,我甚至没有什么经验(根本没有),但是在这一点上,我接受所有建议,因为我花了整整一天的时间寻找一个答案! :)
没有创建一个名为'Mods'的类,并且它是Item的一个属性我不知道你是否可以用这种简单的搜索方式(使用属性)来做到这一点,如果你想这样做我认为你需要有'Items'实现['IXmlSerializable'](http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable(v = vs.110).aspx)。 – 2014-11-14 21:48:23
我怀疑我将不得不创建一个子类“MODS”,这不是一个问题,但我不知道如何正确实现它; 我假设Item类将需要Mods类型的mods变量。好吧到目前为止。但是我怎样才能从XML文件的mods节点属性中填充这个mods变量的变量? – Cherno 2014-11-14 21:53:37
与您在ItemDirectory中执行'Item'完全相同。 – 2014-11-14 21:55:19