горячий для записи в файл xml (для разбора с помощью TBXML)

Я пытаюсь загрузить онлайн-файл, сохранить его локально, а затем проанализировать его с помощью TBXML!

Проблема в том, что TBXML работает только с этим кодом:

    TBXML *tbxml = [[TBXML tbxmlWithXMLFile:@"data.xml"] retain];

Для загрузки я использую этот код:

NSError *err = [[[NSError alloc] init] autorelease];
NSString *url = [[NSString stringWithFormat:@"http://url/data.xml"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *myFile = [NSString stringWithContentsOfURL:[NSURL URLWithString:url] encoding:NSUTF8StringEncoding error:&err];

и это работает! Теперь у меня есть все данные в "myFile" NSString!

Для записи в файл я использую это (и, вероятно, здесь проблема!)

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSError *error;
NSString *myFile = [documentsDirectory stringByAppendingPathComponent:@"abc.xml"];
BOOL succeed = [myTxtFile writeToFile:myFile atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (!succeed){
NSLog(@"no");
}

и это работает! если я сделаю это

NSString *myString = [[NSString alloc] initWithContentsOfFile:myFile encoding:NSUTF8StringEncoding error:NULL];
NSLog(@"%@", myString);

это работает, я вижу все данные из xml!

Проблема в том, что когда я вызываю метод для его анализа с помощью TBXML

это

TBXML *tbxml = [[TBXML tbxmlWithXMLFile:myString] retain];

крушение! Я думаю, что для TBXML нужен локальный файл, сохраненный в каталоге проекта!

Как я могу это сделать? Спасибо! :)


person JAA    schedule 09.03.2011    source источник
comment
Пожалуйста, опубликуйте результат сбоя. Кроме того, здесь вы используете myString в двух контекстах: сначала вы читаете в него содержимое файла, чтобы зарегистрировать его. Затем вы передаете его как параметр tbxmlWithXMLFile:, но мне интересно, каково в этом случае содержимое myString (пожалуйста, проверьте через NSLog).   -  person DarkDust    schedule 09.03.2011
comment
делая [CODE]NSLog(@%@, myString);[/CODE] я вижу все xml-данные! Но когда я вызываю [CODE]tbxmlWithXMLFile:myString[/CODE], происходит сбой без какого-либо вывода, точно так же, как вы передаете несуществующий файл!   -  person JAA    schedule 09.03.2011
comment
Отладчик по-прежнему будет выдавать вам некоторый вывод (например, произошел сбой из-за EXC_BAD_ACCESS или из-за того, что сообщение было отправлено объекту, который не смог его обработать).   -  person DarkDust    schedule 09.03.2011
comment
нет, никто не выводит! не важно!   -  person JAA    schedule 09.03.2011
comment
Это было бы очень странно, так как отладчик всегда печатает что-то вроде ‹quote›Программа получила сигнал: «EXC_BAD_ACCESS».‹/quote› в случае сбоя. Или вы не запускаете приложение через Xcode?   -  person DarkDust    schedule 09.03.2011
comment
нет нет, я запускаю приложение через xcode! Лучше через консоль! Я пытался проанализировать несуществующий файл (например, @dsjkfhdsfjklsa.xml), и приложение вылетает без вывода... вот в чем проблема! с моим кодом файл abc.xml не сохраняется... или лучше не сохраняется в каталоге проекта! Вы знаете, как это сделать?   -  person JAA    schedule 09.03.2011


Ответы (3)


Есть и другие инициализаторы, например, вы можете попробовать этот:

 TBXML *tbxml = [[TBXML alloc] initWithXMLString:myString];

где myString содержит необработанную строку XML. Или еще лучше:

 TBXML *tbxml = [[TBXML alloc] initWithURL:[NSURL URLWithString:@"http://url/data.xml"];

что полностью избавляет вас от необходимости иметь дело с файлами и путями.

Подробнее см. в документации по API.

person DarkDust    schedule 09.03.2011

Из кода, который вы разместили, myString содержит весь XML. Вы должны делать

 TBXML *tbxml = [[TBXML tbxmlWithXMLFile:@"abc.xml"] retain];
person Krishna    schedule 09.03.2011
comment
Я пробовал, но ничего, приложение вылетает без каких-либо результатов! это как если файл не существует! - person JAA; 09.03.2011

Вы должны передать myFile, а не myString в качестве аргумента tbxmlWithXMLFile:. Но если он вылетает из-за несуществующего файла, вам лучше пересмотреть, действительно ли вы хотите использовать эту библиотеку.

person DarkDust    schedule 09.03.2011
comment
нет, он вылетает :( вы думаете, что то, что я хочу сделать, невозможно (используя tbxml, конечно)? - person JAA; 09.03.2011