簡體   English   中英

嘗試在Windows Phone 8應用中寫入然后讀取XML文件時出錯

[英]Error when trying to write then read a XML file in Windows Phone 8 app

編輯:添加自發布以來收集的所有信息。

嗨堆高車! 我第一次嘗試使用Visual Studio 2013和WP8 SDK制作Metro風格的Windows Phone 8應用程序。

該應用程序應該能夠將用戶的一些數據存儲在應用程序文件夾中存儲的XML文件中。

這是它應該做的:

用戶以正常方式使用該應用程序,然后保存數據。 我想將其添加到僅使用xml聲明行和根元素創建的dataFile.xml文件中。 然后,如果用戶想查看自己保存的內容,則應用程序應在XML文件中獲取數據並顯示它。

這是基本的XML文件:

<?xml version="1.0" encoding="utf-8" ?>
<itemList>

</itemList>

還有我寫數據的代碼:(來自此處修改的修改)

var isoFileStream = new IsolatedStorageFileStream("Saves\\itemList.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite, store); //Where store is my definition of IsolatedStorageFile
var xDoc = XDocument.Load(isoFileStream);
                    var newItem = new XElement("Item",
                            new XElement("Name", ItemName.Text),
                            //all other elements here
                            new XElement("Method", method));
        xDoc.Root.Add(newItem);
        xDoc.Root.Save(isoFileStream);
        isoFileStream.Close();

多虧了IsolatedStorage和ISETool.exe,我可以使用上面的代碼在xml文件中寫入內容后檢索它。 結果如下:

<?xml version="1.0" encoding="utf-8" ?> <itemList></itemList><?xml version="1.0" encoding="utf-8"?>
    <itemList>
        <Item>
            <Name>My Item</Name>
            <Method>Item method</Method>
        </Item>
    </itemList>

因此,為了恢復,代碼加載了上面顯示的xml文件,使用xDoc.Root檢測了根元素,並在其中添加了項。 但是,保存時會重新創建XML聲明和根元素,從而使文件結構不正確,因此無法使用。 為什么呢 好問題。 如何解決? 這就是我想知道的。

任何想法 ?

在此先感謝:)

我終於找到了解決方法,因此我在回答自己的問題,以防有人遇到相同的問題。

問題在這里:

xDoc.Root.Save(isoFileStream);

這將使用用於加載XML文件先前內容的文件流來保存以代碼格式設置的XDocument。 但是可以使用XDocument.Save函數來格式化XML文件,即使該文件為空也可以使用。 因此,它將數據寫入文件的末尾,通過添加兩個聲明使結構不正確。

解決方案是使用XDocument.load(fileStream)將XML內容收集到var xDoc中,然后關閉流並使用FileMode選項設置為Create來打開一個新流,以覆蓋現有文件:

var isoFileStream = new IsolatedStorageFileStream("Saves\\itemList.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite, store);
var xDoc = XDocument.Load(isoFileStream);
isoFileStream.Close();
isoFileStream = new IsolatedStorageFileStream("Saves\\itemList.xml", FileMode.Create, FileAccess.ReadWrite, store);
                    var newItem = new XElement("Item",
                            new XElement("Name", ItemName.Text),
                            //all other elements here
                            new XElement("Method", method));
        xDoc.Root.Add(newItem);
        xDoc.Save(isoFileStream);
        isoFileStream.Close();

使用它可以完美地工作。 感謝那些回答了他們的幫助的人:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM