2013-08-19 2 views
0

Почему, если я сохраняю свои переменные и загружаю их обратно, то имя_компании и имя_файла это: 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 или [настройки] (http://www.codeproject.com/Articles/17659/How-To-Use-the-Settings-Class-in-C) или [any] (http://www.codeproject.com/Articles/16953/XML-configuration-files-made-simple-at-last) выделенной библиотеки. Слишком много повторений кода. [DRY] (http://en.wikipedia.org/wiki/Don't_repeat_yourself) –

ответ

1

Проблема здесь:

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

Вы настраиваете элементы внутреннего текста свойство к XmlElement класса + имен, вызывая .ToString() на объекте.

Ваше намерение не ясно, но я предполагаю, что вам нужно установить свойство 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

Смежные вопросы