2013-11-26 5 views
1

Я пытаюсь создать приложение для Android, которое использует веб-службы. Я хочу прочитать XML-файл, используя XDocument. Я создал папку в моем проекте с именем xmlfolder и поместил в нее свой XML-файл с именем myxml.Чтение xml-файла с помощью XDocument

Я пробовал другие решения на SO How to load XML file located inside the folder of the application in window phone 7?, но, похоже, не работает. Я продолжаю получать ошибку:

System.IO.DirectoryNotFoundException: Could not find a part of the path "/xmlfolder/myxml.xml".

и

myxml.xml myxml is null 

Вот то, что я пробовал:

if (string.IsNullOrEmpty(myFIileXML)) 
{ 
    XDocument loadedData = XDocument.Load ("xmlfolder/myxml.xml"); 
    myFileXML = loadedData.ToString(); 
} 
+0

Возможный дубликат [XDocument Чтение XML-файла с элементом Root с пространством имен] (http://stackoverflow.com/questions/19142606/xdocument-reading-xml-file-with-root-element-having-namespaces) – Monika

+0

Are ваши файлы заданы как 'content' и' copy always'? – MarcinJuraszek

+0

@Monika благодарит за ответ. Но я уже прошел эту ссылку, но, похоже, не решу проблему. Я просто не могу найти этот файл. – user3034944

ответ

4

Я думаю, вы не указав относительный путь правильно. Вам также не хватает. в myxmlxml, хотя я предполагаю, что это просто опечатка в вашем посте. Попробуйте вместо этого:

XDocument loadedData = XDocument.Load ("../xmlfolder/myxml.xml"); 
+0

yup my bad .. был опечаткой. Вы имеете в виду, мне нужно указать точное местоположение myxml.xml на моей машине? например: C: \ Users \ pc \ Documents \ Projects \ MyProject \ MyProject \ xmlFiles \ myxml – user3034944

+0

Это будет указывать абсолютный путь, который тоже будет работать. Вы также можете использовать относительный путь, который, я думаю, вы можете сделать, как описано выше в Windows. Возможно, прочитайте разницу. –

+0

Я попытался сделать то, что вы предложили, но все равно получить ту же ошибку – user3034944

0

Если вы еще не заметили, есть хороший Resource и Assets папки в вашем Android проекта, это где Android требует, чтобы все ваши файлы приложения, чтобы быть. Они не могут жить за пределами, если они не являются классом. В этом случае вы, вероятно, захотите, чтобы ваш файл находился в папке Assets, отметьте «Build Action» в качестве AndroidAsset. Таким образом, вы можете получить доступ к файлу как:

using (var sr = Assets.Open("myxml.txt")) 
{ 
    var data = XDocument.Load(sr); 
} 
+0

Спасибо за внимание. Я попробовал ваше решение, теперь я получаю исключение Java.IO.FileNotFOundException, хотя я поместил файл в папку «Мои ресурсы». – user3034944

+0

Вы установили действие сборки в «AndroidAsset»? – Cheesebaron

+0

Да, я установил его в AndroidAsset – user3034944

0

Текущие рабочий каталог на Android является /, который не доступно для записи (и не содержит ваши приложения файлов). Таким образом, сообщение об ошибке:

System.IO.DirectoryNotFoundException: Could not find a part of the path "/xmlfolder/myxml.xml". 

Исправление состоит в том, чтобы использовать путь, который фактически существует, например. System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal). Кроме того, обратите внимание, что вы должны создать этот путь «в другом месте», например. с Directory.CreateDirectory().

Если это не так, вы можете посмотреть в использовании сборки действияEmbeddedResource с Assembly.GetManifestResourceStream().

Смежные вопросы