使用xml保存字符串

本文关键字:字符串 保存 xml 使用 | 更新日期: 2023-09-27 18:28:09

为什么如果我保存变量并将其加载回来,那么companyName和playerName就是这样的:System.Xml.XmlElement,而不是我写的?其他变量也可以正常工作。我正在为此挣扎一段时间,所以我真的很感激任何帮助,谢谢。

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.
    }
}

使用xml保存字符串

问题就在这里:

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

通过调用对象上的.ToString(),可以将elements内部文本属性设置为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();调用在这里是不安全的,因为根据LoadGamePrefs() 中的代码判断,playerName/companyName变量已经显示为字符串