#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();
- Обратите внимание, что вам нужно будет указать полный путь к папке, если ваш ресурс находится в подпапке.