2015-09-07 45 views
0

我正在製作一個Web瀏覽器,並再次陷入困境。我目前使用的代碼創建一個XML文檔並使用該文檔來保存和引用書籤和收藏夾。下面是代碼:XML引用的問題

public static String favXml = "favourites.xml", linksXml = "links.xml"; 
String settingsXml = "settings.xml", historyXml = "history.xml"; 
List<String> urls = new List<String>(); 
XmlDocument settings = new XmlDocument(); 
String homePage; 
CultureInfo currentCulture; 

,然後用這個代碼引用:

private void addFavourite(String url, string name) 
{ 
    XmlDocument myXml = new XmlDocument(); 
    XmlElement el = myXml.CreateElement("favorit"); 
    el.SetAttribute("url", url); 
    el.InnerText = name; 
    if (!File.Exists(favXml)) 
    { 
     XmlElement root = myXml.CreateElement("favourites"); 
     myXml.AppendChild(root); 
     root.AppendChild(el); 
    } 
    else 
    { 
     myXml.Load(favXml); 
     myXml.DocumentElement.AppendChild(el); 
    } 

    myXml.Save(favXml); 
} 

這個問題,我有代碼,是我每次發佈更新 - 它重置用戶的書籤。我真的不知道如何解決這個問題。任何幫助非常感謝,任何可以提供幫助的人都會在我的更新日誌和最終版本中提及。我目前有36個預覽測試人員,他們都被這個故障困擾。

+0

你說的意思是「發佈更新」 ?你如何發佈更新,你是否會發布新的安裝程序,你有更新服務?我的猜測是;您的更新/安裝機制正在刪除或覆蓋'favourites.xml'文件。也可以嘗試在'addFavourite'方法中添加一些日誌記錄,以便查看正在發生的事情。 –

+0

你調試了你自己的代碼嗎? –

回答

0

代碼邏輯沒有問題,我建議重構條件句。

if (!File.Exists(favXml)) 

當應用程序啓動時初始化.xml文件,包括生成根元素。那麼private void addFavourite(String url, string name)只會向此xml添加元素。

如果您在多線程中使用此文件,最好鎖定文件以避免覆蓋。

+0

這是如何回答這個問題的? –

0

您應該將所需的XML文件加載到您的XmlDocument中,以便獲得更新的XML結果。

private void addFavourite(String url, string name) 
{ 
    XmlDocument myXml = new XmlDocument();  
    if (File.Exists(favXml)) 
    {   
     myXml.Load(favXml); // load your XML file here   
    } 
    else 
    { 
     XmlElement root = myXml.CreateElement("favourites"); 
     myXml.AppendChild(root); 
    } 

    XmlElement el = myXml.CreateElement("favorit"); 
    el.SetAttribute("url", url); 
    el.InnerText = name; 
    myXml.DocumentElement.AppendChild(el); 
    myXml.Save(favXml); 
} 

注:爲了檢驗這一方法,你應該處理文件創建和刪除邏輯在測試框架的設置()和tearDown()過程
--SJ

+0

在代碼中的那一點,它已被檢查,該文件不存在 - 那麼你打算加載什麼? –

+0

@CharlesMager,感謝您指出我的錯誤,現在我更新了我的解決方案! –