#cocoa #nsxmlparser
#cocoa #nsxmlparser
Вопрос:
как передать локальный путь в NSXMLParser
вот так
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:storePath];
где storepath — это локальный путь, подобный этому:
/var/mobile/Applications/56EEB906-2B73-493C-9BE7-2732440CDB69/Documents/xml1.php
и мой код выглядит следующим образом:
//NSURL *urla = [[NSURL alloc] initWithString:storePath];
NSURL *urla = [[[NSURL alloc] init] fileURLWithPath:storePath];
//NSData *dataa = [NSData dataWithContentsOfURL:urla];
NSLog(@"urls ois %@",urla);
помогите мне, почему я получаю нулевое значение
Ответ №1:
Эй, все это несколько несправедливо.
я предлагаю это, очень просто
NSString *path=@"/Users/farshore/Desktop/prasanna/XMLParsing/Books-6.xml"; //this is ur path of xml file
NSURL *url = [[NSURL alloc] initFileURLWithPath:path];
Ответ №2:
Попробуйте этот:
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask, YES
);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSURL *urla = [NSURL fileURLWithPath:[documentsDirectory
stringByAppendingString:@"/xml1.php"]];
Более подробная информация в Руководстве по программированию приложений для iPhone: получение путей к каталогам приложений.
Обновление: Существует распространенное недоразумение, что stringByTrimmingCharactersInSet
. Он не заменяет все пробелы в строке, он только удаляет начальные и конечные пробелы.
Если вы хотите избавиться от пробелов, вам нужно заменить их самостоятельно, используя что-то вроде stringByReplacingCharactersInRange:withString:
.
Однако:
- Я не уверен, чем бы вы заменили эти строки, чтобы получить действительный путь. Насколько я знаю, в симуляторе путь к папке Documents приложения на самом деле содержит пробелы (которые случайно вызываются в документе, на который я ссылался).
- Я не уверен, почему пробелы вас беспокоят. Эта строка является допустимым путем (при условии, что вы, конечно, действительно создали
<app>/Documents/xml1.php
файл); и согласноNSXMLParser
документации,initWithContentsOfUrl
принимает любой полный URL-адрес со схемой, поддерживаемойNSURL
, иfile://
является поддерживаемой схемой.
Если NSXMLParser
возвращается конкретная ошибка, добавьте ее в свой вопрос (или задайте другой), чтобы мы могли помочь вам с актуальной проблемой.
Комментарии:
1. спасибо, но как удалить эти пробелы?? file://localhost/Users/applefan/Library/Application Support/iPhone Simulator/3.1.3/Applications/134C5D58-D930-4F0A-B2F7-D25A170D6F09/Documents/xml1.php
2. ); NSString *documentsDirectory = [пути к объекту objectAtIndex:0]; documentsDirectory = [documentsDirectory stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; NSLog(@»documentsDirectory is %@»,documentsDirectory ); NSURL *urlc = [NSURL fileURLWithPath:[documentsDirectory stringByAppendingString:@»/ Строка добавления строки:@»/xml1.php «]]; //urlc = [urlc stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; NSLog(@»urls is %@»,urlc); в urlc все еще есть пробел, пожалуйста, помогите
3. вот так ile://localhost/Users/applefan/Library/Application Support/iPhone Simulator/3.1.3/Applications/FD5A8AF3-0B07-4D56-8477-97F0DCEF15B5/Documents/xml1.php
4. Привет NSString *documentsDirectory = [пути к объекту objectAtIndex:0]; documentsDirectory = [documentsDirectory stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; //documentsDirectory = [documentsDirectory stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)NSUTF8StringEncoding]; NSURL *urlc = [NSURL fileURLWithPath:[Директория документов stringByAppendingString:@»/xml1.php » ]]; здесь мой documentdirctly работает нормально без каких-либо пробелов,, но когда я передаю это в NSurl, я не знаю, почему он добавляет эти % 20 между ними
5. RFC 3986 ( tools.ietf.org/html/rfc3986 ) указывает разрешенные символы в URL. В частности, пробел не входит в набор разрешенных символов, поэтому его необходимо кодировать в процентах, согласно пункту 2.1 того же RFC. Отсюда
.
Ответ №3:
Я предполагаю, что вы читаете PHP-файл напрямую, а не передаете его через PHP, поэтому выходные данные не являются XML.