[英]Loading xml file into uwp application c#
我正在使用以下代碼將xml文件從安裝位置加載到本地文件夾中。
// Has the file been copied already?
bool blFileExist = false;
try
{
await ApplicationData.Current.LocalFolder.GetFileAsync("settings.xml");
// No exception means it exists
blFileExist = true;
}
catch (System.IO.FileNotFoundException)
{
// The file obviously doesn't exist
blFileExist = false;
}
catch (Exception)
{
}
if (!blFileExist)
{
try
{
// Cant await inside catch
StorageFile file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync("settings.xml");
await file.CopyAsync(ApplicationData.Current.LocalFolder);
}
catch (System.IO.FileNotFoundException)
{
}
catch (Exception)
{
}
}
然后在需要時使用此方法加載它。
private async void loadSettings()
{
try
{
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync("settings.xml");
using (Stream fileStream = await file.OpenStreamForReadAsync())
{
doc = XElement.Load(fileStream);
}
}
catch (System.IO.FileNotFoundException ex)
{
}
catch (Exception ex)
{
}
}
最后,我使用它將其保存回本地文件夾。
private async void saveSettings()
{
try
{
StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync("settings.xml");
using (Stream fileStream = await file.OpenStreamForWriteAsync())
{
//Save URLs
doc.Save(fileStream);
}
}
catch (System.IO.FileNotFoundException ex)
{
}
catch (Exception ex)
{
}
}
代碼編譯,運行並且不會引發任何錯誤,但是沒有按預期執行。 當使用第二個代碼塊中的代碼加載文件時,它會跳出代碼並返回調用該文件的方法,就好像拋出錯誤並在到達該行時進入catch塊
using (Stream fileStream = await file.OpenStreamForReadAsync())
不太確定,但我認為這可能取決於編碼和字節順序標記。 有什么建議么?
這是有問題的xml。
<?xml version="1.0" encoding="utf-8" ?>
<settings>
<feeds>
<url name="All">http://services.parliament.uk/calendar/all.rss</url>
<url name="CommonsMainChamber">http://services.parliament.uk/calendar/commons_main_chamber.rss</url>
<url name="CommonsSelectCommittee">http://services.parliament.uk/calendar/commons_select_committee.rss</url>
<url name="CommonsGeneralCommittee">http://services.parliament.uk/calendar/commons_general_committee.rss</url>
<url name="CommonsWestminsterHall">http://services.parliament.uk/calendar/commons_westminster_hall.rss</url>
<url name="LordsMainChamber">http://services.parliament.uk/calendar/lords_main_chamber.rss</url>
<url name="LordsGrandCommittee">http://services.parliament.uk/calendar/lords_grand_committee.rss</url>
<url name="LordsSelectCommittee">http://services.parliament.uk/calendar/lords_select_committee.rss</url>
<url name="ParliamentaryNews">http://www.parliament.uk/g/RSS/news-feed/?pageInstanceId=209</url>
<url name="CommonsNews">http://www.parliament.uk/g/RSS/news-feed/?pageInstanceId=25366</url>
<url name="LordsNews">http://www.parliament.uk/g/RSS/news-feed/?pageInstanceId=25367</url>
<url name="CommitteeNews">http://www.parliament.uk/g/RSS/news-feed/?pageInstanceId=25388</url>
<url name="CommonsBriefingPapers">http://researchbriefings.parliament.uk/rssfeed/Commons%20Briefing%20papers</url>
<url name="LordsLibraryNotes">http://researchbriefings.parliament.uk/rssfeed/Lords%20Library%20notes</url>
<url name="LordsInFocus">http://researchbriefings.parliament.uk/rssfeed/Lords%20In%20Focus</url>
<url name="POSTBriefs">http://researchbriefings.parliament.uk/rssfeed/POSTbriefs</url>
<url name="POSTNotes">http://researchbriefings.parliament.uk/rssfeed/POSTnotes</url>
<url name="EarlyDayMotions">http://www.parliament.uk/g/rss/generic/?pageInstanceId=78055&type=Edms</url>
</feeds>
</settings>
恐怕您的問題出在您的XML文件中。 請檢查最后一個網址的值。 XML文件實際上包含一個“&”字符。
<url name="EarlyDayMotions">http://www.parliament.uk/g/rss/generic/?pageInstanceId=78055&type=Edms</url>
真正的“&”本身會中斷XML文件。
您可以使用&
代替&
,那么您的代碼將起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.