2011-08-11 6 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을 사용하여 enum과 같은 기술을 비교하고 싶습니다. 그러나 이것은 매우 안전하지 않으며 인적 오류가 발생할 수 있습니다.

대안이 있습니까?

답변

1

코드가 의미가 없습니다. 텍스트 노드의 Name을 사용하고 있습니다. 항상 #text입니다.

나는 이것이 당신이 찾고있는 것이 확실치 않지만 Enum.Parse()을 사용하여 문자열에서 enum 값을 얻을 수 있습니다. 그런 다음 정상적인 디렉토리 인덱싱을 사용해야합니다.

관련 문제