public void AssignSkillFromXml(string xmlCharID, string skillNodeDir)
{
XmlDocument doc = new XmlDocument();
doc.Load(@"/home/holland/code/svn/chronos-/trunk/chronos/Lib/XmlFiles/Characters.xml");
XmlNode node = doc.SelectSingleNode("Character/"+xmlCharID+"/Skills/"+skillNodeDir+"/text()");
foreach(KeyValuePair<Skill, int> entry in skills)
{
bool nodeEqualsKey =
(node.Name.ToString() == entry.Key.ToString());
Console.WriteLine(entry.Key);
if (nodeEqualsKey)
{
int val;
int.TryParse(node.Value, out val);
skills[entry.Key] = val;
Console.WriteLine(val);
}
}
}
如图所示,我有一个方法,旨在从xml节点分配值。节点的名称应该作为字符串传递,并通过XmlNode指定的目录访问。
从那里开始,foreach循环遍历字典,将节点的名称与字典的密钥进行比较,该密钥恰好是枚举。唯一可行的方法是将枚举解析为字符串,并与节点名称进行比较。我想使用skillNodeDir将这种技能与枚举进行比较,但这不是很安全,而且更容易受到人为错误的影响。
有替代方案吗?
答案 0 :(得分:1)
您的代码没有多大意义,您使用的是Name
文本节点,该节点始终为#text
。
我不确定这是您要找的内容,但您可以使用Enum.Parse()
来获取字符串中的枚举值。然后,正常的目录索引应该可以使用它。