Как прочитать файл ресурсов XML из моего пакета приложений в MonoTouch / MonoGame для iOS?

#xml #ios #resources #xamarin.ios #bundle

#xml #iOS #Ресурсы #xamarin.ios #пакет

Вопрос:

Используя MonoTouch / MonoGame, я пытаюсь включить пользовательский XML-файл в свой пакет приложений для использования в моем коде, но я не знаком с правильным способом это сделать. Я включил XML-файл в свой проект и пометил его как «Содержимое», поэтому его следует скопировать в пакет приложений.

В этом случае я хочу загрузить некоторые данные карты в формате XML, который я определил (формат XML предписан, поэтому я не могу его изменить), сохраняя при этом возможность также запускать тот же код в XNA на ПК. Мне пока не очень повезло с поиском правильного механизма на iOS. Я бы ожидал чего-то подобного следующему, но в MapPath отображается значение null (возможно, я просто неправильно понимаю правильное использование 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 
  

Есть какие-нибудь советы?

Ответ №1:

У меня есть XML-файлы, помеченные как содержимое в моем проекте MT. Я загружаю их в XDocument напрямую:

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

Файл просто содержится в пакете приложений, а не встроен в исполняемый файл, как это было бы в традиционном.СЕТЕВОЙ ресурс.

Комментарии:

1. К сожалению, это заставляет меня изменить мои процедуры синтаксического анализа, чтобы использовать XDocument. Я действительно не хочу полностью менять свой код… Мне просто нужно получить дескриптор файла. 🙁

2. Если ваш файл помечен как Content, вы должны просто иметь возможность открыть его, передав относительный путь FileStream (), как я делаю с моим вызовом XDocument. То, что вы делаете для получения пути к ресурсу, не должно быть необходимым.

Ответ №2:

Я использую как XDocument, так и Streams для чтения XML-данных в различных приложениях. Как уже упоминалось, главное — убедиться, что ваш файл помечен как «Содержимое».

Ответ №3:

Используйте TitleContainer.openStream, он кроссплатформенный.

Пример:

 string xml = new System.IO.StreamReader(TitleContainer.OpenStream("MyApp.Maps."   map   ".xml")).ReadToEnd();
  
  • Обратите внимание, что вам нужно будет указать полный путь к папке, если ваш ресурс находится в подпапке.