Ошибка синтаксического анализа NSXML при использовании с NSData - PullRequest
0 голосов
/ 08 января 2012

У меня есть простой XML-файл, содержащий список подмножеств продуктов.Когда я загружаю файл из комплекта приложения iOS и отправляю его через анализатор с: initWithNSURL, с NSURL, указывающим на локальный файл, он анализируется правильно.

Однако, если я загружаю тот же файл черезNSURLConnection и передать его парсеру с initWithData, анализ не удастся.Я могу подтвердить, что данные загружаются правильно, потому что, если я выполню NSString *temp = [NSString stringWithUTF8String:[downloadedData bytes]];, выведенная строка верна.У меня есть парень, который чувствует, что это когда-нибудь связано с кодированием где-то вдоль линии, есть мысли?

1 Ответ

1 голос
/ 09 января 2012

Мой друг выполняет работу парсера, NSString * xmlData = [[NSString alloc] initWithData: кодировка responseData: NSUTF8StringEncoding];

xmlData должен выглядеть
азбука а мой друг просто анализирует строку, и это работает

и я использовал libxml2 для разбора xml с

xmlTextReaderPtr reader = xmlReaderForMemory([data bytes], [data length], NULL, NULL,             (XML_PARSE_NOBLANKS | XML_PARSE_NOCDATA | XML_PARSE_NOERROR | XML_PARSE_NOWARNING));

if (reader != NULL) {
    ret = xmlTextReaderRead(reader);
    while (ret == 1) {
        const xmlChar *name, *value;

        name = xmlTextReaderConstName(reader);
        if (name == NULL)
        name = BAD_CAST "--";
        NSString *Name = [NSString stringWithCString:(const char*)name encoding:NSUTF8StringEncoding];

        value = xmlTextReaderConstValue(reader);
        if (value == NULL)
            value = BAD_CAST "\n";
        NSString *Value = [NSString stringWithCString:(const char*)value encoding:NSUTF8StringEncoding];
        NSLog("%d %d %@ %d %@", 
        xmlTextReaderDepth(reader),
        xmlTextReaderNodeType(reader),
        Name,
        xmlTextReaderIsEmptyElement(reader),
        Value);



        ret = xmlTextReaderRead(reader);
    }
    xmlFreeTextReader(reader);
  }

и результат тоже правильный

...