2011-05-16 26 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(); 
  • 请注意,你需要在文件夹的完整路径传递,如果你的资源是在子文件夹中。
相关问题