2013-08-19 174 views
0

爲什麼如果我保存我的變量並加載它們,那麼companyName和playerName是這樣的:System.Xml.XmlElement,而不是我寫的東西?其他變量工作得很好。我一直在努力,所以我會很感激任何幫助,謝謝。用xml保存字符串

public void LoadGamePrefs() 

{ 

    string filepath = "c:/Users/gamePrefs.xml"; 
    XmlDocument xmlDoc = new XmlDocument(); 


    if(File.Exists (filepath)) 
    { 
     xmlDoc.Load(filepath); 
     XmlNodeList transformList = xmlDoc.GetElementsByTagName("GamePrefs"); 


     foreach (XmlNode transformInfo in transformList) 
     { 
      XmlNodeList transformcontent = transformInfo.ChildNodes;  

      foreach (XmlNode transformItems in transformcontent) 
      {     
       if(transformItems.Name == "firstStart") 
       { 
        firstStart = bool.Parse(transformItems.InnerText); 
       } 
       if(transformItems.Name == "drawFirstGui") 
       { 
        drawFirstStartGui = bool.Parse(transformItems.InnerText); 
       } 
       if(transformItems.Name == "companyName") 
       { 
        companyName = transformItems.InnerText; 
       } 
       if(transformItems.Name == "playerName") 
       { 
        playerName = transformItems.InnerText; 
       } 
       if(transformItems.Name == "money") 
       { 
        scriptMainBackground.money = int.Parse(transformItems.InnerText); 
       } 
       if(transformItems.Name == "year") 
       { 
        year = int.Parse(transformItems.InnerText); 
       } 
       if(transformItems.Name == "month") 
       { 
        month = int.Parse(transformItems.InnerText); 
       } 
       if(transformItems.Name == "week") 
       { 
        week = int.Parse(transformItems.InnerText); 
       } 
       if(transformItems.Name == "day") 
       { 
        day = int.Parse(transformItems.InnerText); 
       } 
      } 
     } 
    } 
} 



public void SaveGamePrefs() { 

    // Accesing other script and variable 
    GameObject mainBackground = GameObject.FindGameObjectWithTag("MainBackground"); 

    ScriptMainBackground scriptMainBackground = mainBackground.GetComponent<ScriptMainBackground>();   

    string filepath = "c:/Users/gamePrefs.xml"; 
    XmlDocument xmlDoc = new XmlDocument(); 


    if(File.Exists (filepath)) 
    { 
     xmlDoc.Load(filepath); 
     XmlElement elmRoot = xmlDoc.DocumentElement;  

     elmRoot.RemoveAll(); // remove all inside the transforms node. 
     XmlElement elmNew = xmlDoc.CreateElement("GamePrefs"); 

     XmlElement gamePrefs_firstStart = xmlDoc.CreateElement("firstStart"); 
     gamePrefs_firstStart.InnerText = firstStart.ToString();    

     XmlElement gamePrefs_drawFirstGui = xmlDoc.CreateElement("drawFirstGui"); 
     gamePrefs_drawFirstGui.InnerText = drawFirstStartGui.ToString();    

     XmlElement gamePrefs_companyName = xmlDoc.CreateElement("companyName"); 
     gamePrefs_companyName.InnerText = gamePrefs_companyName.ToString();    

     XmlElement gamePrefs_playerName = xmlDoc.CreateElement("playerName"); 
     gamePrefs_playerName.InnerText = gamePrefs_playerName.ToString();    

     XmlElement gamePrefs_Money = xmlDoc.CreateElement("money"); 
     gamePrefs_Money.InnerText = scriptMainBackground.money.ToString();   

     XmlElement gamePrefs_Year = xmlDoc.CreateElement("year"); 
     gamePrefs_Year.InnerText = week.ToString();    

     XmlElement gamePrefs_Month = xmlDoc.CreateElement("month"); 
     gamePrefs_Month.InnerText = week.ToString();    

     XmlElement gamePrefs_Week = xmlDoc.CreateElement("week"); 
     gamePrefs_Week.InnerText = week.ToString();  

     XmlElement gamePrefs_Day = xmlDoc.CreateElement("day"); 
     gamePrefs_Day.InnerText = day.ToString();    

     //XmlElement gamePrefs_GenreNumber = xmlDoc.CreateElement("genreNumber"); 
     //gamePrefs_Day.InnerText = genreNumber.ToString(); 


     elmNew.AppendChild(gamePrefs_firstStart); 
     elmNew.AppendChild(gamePrefs_drawFirstGui); 
     elmNew.AppendChild(gamePrefs_companyName); 
     elmNew.AppendChild(gamePrefs_playerName); 
     elmNew.AppendChild(gamePrefs_Money); 
     elmNew.AppendChild(gamePrefs_Week); 
     elmNew.AppendChild(gamePrefs_Day); 
     //elmNew.AppendChild(gamePrefs_GenreNumber); 
     elmRoot.AppendChild(elmNew);  

     xmlDoc.Save(filepath); // save file. 
    } 
} 
+0

能否請您格式化你的代碼 - 消除垂直間距,使其可讀 –

+0

你有這個文件的xsd? – vittore

+1

也許你應該簡單地使用序列化api,或[settings](http://www.codeproject.com/Articles/17659/How-To-Use-the-Settings-Class-in-C)或[任何] (http://www.codeproject.com/Articles/16953/XML-configuration-files-made-simple-at-last)專用庫。代碼重複太多了。 [幹](http://en.wikipedia.org/wiki/Don't_repeat_yourself) –

回答

1

的問題是在這裏:

XmlElement gamePrefs_playerName = xmlDoc.CreateElement("playerName"); 
gamePrefs_playerName.InnerText = gamePrefs_playerName.ToString(); 

您通過對象調用.ToString()設置元素內部文本屬性設置爲XmlElement類+命名空間。

您的意圖不明確,但我認爲您需要將InnerText屬性設置爲playerName變量,而不是XmlElement對象的字符串表示形式。

XmlElement gamePrefs_companyName = xmlDoc.CreateElement("companyName"); 
gamePrefs_companyName.InnerText = companyName; 

XmlElement gamePrefs_playerName = xmlDoc.CreateElement("playerName"); 
gamePrefs_playerName.InnerText = playerName; 

注意,ToString();呼叫unesseccary這裏爲playerName/companyName變量已經顯得串從該編碼判斷在LoadGamePrefs()

+0

它的工作!萬分感謝!! – Xoroxoxoxoxoso

+0

沒問題,如果這回答你的問題[請考慮接受它作爲答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work),以便它可以幫助其他人在未來。 – DGibbs