2011-05-16 54 views
2

使用MonoTouch/MonoGame,我試圖在我的應用程序包中包含一個自定義XML文件以供我的代碼使用,但我並不熟悉正確的方式。我已將XML文件包含在我的項目中,並將其標記爲「內容」,因此應將其複製到應用程序包中。如何在iOS的MonoTouch/MonoGame中從我的應用程序包中讀取XML資源文件?

在這種情況下,我想加載一些我已經定義的XML地圖數據(XML格式是規定的,所以我不能改變它),同時保留在XNA下運行相同代碼的能力PC。我還沒有很幸運地找到iOS上的正確機制。我會期待像下面這樣的東西,但是mapPath會變成空(可能我只是誤解了API的正確使用)。

#if WINDOWS 
Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyApp.Maps." + map + ".xml"); 
#else 
string mapPath = NSBundle.MainBundle.PathForResource(map,"xml"); 
Stream s = new FileStream(mapPath, FileMode.Open, FileAccess.Read); 
#endif 

任何提示?

回答

0

我有我的MT項目中標記爲內容的XML文件。我把它們加載到直接一個XDocument:

XDocument doc = XDocument.Load("states.xml"); 

該文件只是包含在應用程序包內,而不是嵌入可執行文件的方式將它與傳統的.NET資源。

+0

不幸的是,這使得我改變我的解析例程來使用XDocument。我真的不想完全改變我的代碼...我只需要得到一個處理文件。 ( – JesterScribble 2011-07-03 11:23:54

+0

)如果你的文件被標記爲內容,你應該可以通過將相對路徑傳遞給FileStream()來打開它,就像我用XDocument調用一樣。你正在做的事情是獲取資源路徑不應該被需要。 – Jason 2011-07-03 12:34:57

0

我使用XDocument和Streams來讀取各種應用程序中的XML數據。 如前所述,關鍵是確保您的文件被標記爲「內容」。

0

使用TitleContainer.OpenStream,它是跨平臺友好的。

例子:

string xml = new System.IO.StreamReader(TitleContainer.OpenStream("MyApp.Maps." + map + ".xml")).ReadToEnd(); 
  • 請注意,你需要在文件夾的完整路徑傳遞,如果你的資源是在子文件夾中。
相關問題