горячая запись в XML-файл (для анализа с TBXML) - PullRequest
0 голосов
/ 09 марта 2011

Я пытаюсь загрузить онлайн-файл, сохранить его локально, а затем проанализировать его с помощью 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 нужен локальный файл, сохраненный в каталоге проекта!

Как я могу это сделать? благодарю вас! :)

Ответы [ 3 ]

0 голосов
/ 09 марта 2011

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

0 голосов
/ 09 марта 2011

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

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

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

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

, что полностью исключает необходимость работы с файлами и путями.

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

0 голосов
/ 09 марта 2011

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

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