2011-08-11 3 views
0
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で指定されたディレクトリを介してアクセスされます。XMLノードの文字列表現を取得する

そこから、foreachループは辞書を繰り返し、ノードの名前を辞書のキーと比較します。これはenumになります。これがうまくいく唯一の方法は、列挙型を文字列として解析し、ノードの名前と比較できるかどうかです。 skillNodeDirを使用してスキルを列挙型と比較したいのですが、これはあまり安全ではなく、人為的エラーの影響をより受けます。

代替手段はありますか?

答えて

1

コードはあまり意味がありません。テキストノードのName(常に#text)を使用しています。

これはあなたが探しているものではありませんが、Enum.Parse()を使用すると、文字列から列挙型の値を取得できます。それで、通常のディレクトリインデックス作成がうまくいくはずです。

関連する問題