iPhone: при разборе Xml с арабским содержимым отображается пустое значение - PullRequest
0 голосов
/ 26 августа 2011

Я пытаюсь проанализировать XML-файл, содержащий следующие арабские слова:

 <NewsComponent>
  <HeadLine>العلاجية</HeadLine>
</NewsComponent>

когда я NSLog строку на делегате NSXMLParser, он печатает пустую строку, и даже когда я анализирую данные в UITableView, он показывает пустой текст.

Я кодирую данные как UTF-8, прежде чем передать их анализатору.

Как я могу разобрать XMl без потери содержимого тега HeadLine?

Примечания:

1. Тот же XML с английским языком работает правильно.

2. Отображение XML в любом браузере показывает данные правильно.

3. Преобразование NSData в NSString и NSLoging перед анализом NSString также правильно отображает xml.


Редактировать Как я это делаю?
NSString *sURLREST = @"http://www.example.com/getXml";

NSURL *url = [NSURL URLWithString:sURLREST];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

NSURLResponse *response;
NSError *error = nil;

NSData *data = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &error];
NSString* output = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

NSData* dataOutput = [output dataUsingEncoding: NSUTF8StringEncoding];
NSXMLParser *parser = [[NSXMLParser alloc] dataOutput]; 


-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    if([sCurrentItem isEqualToString:@"HeadLine"])
    {
        [mutuableArray addObject:string];
       // I am just adding the string value to a NSMutuableArray to bind it with the UITableView.
        NSLog(@"%@",string);
    }
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    sCurrentItem = elementName;
}

1 Ответ

1 голос
/ 26 августа 2011

Ваша ошибка лежит в parser:foundCharacters:.Вы не можете ожидать, что этот метод будет вызываться только один раз для каждого элемента.Это может быть вызвано несколько раз.Вы должны создать пустую изменяемую строку перед тем, как метод вызывается в первый раз для каждого элемента (в parser:didStartElement:), а затем добавить новые символы в эту строку.Строка не завершена, пока не будет вызван parser:didEndElement:.

См. Пример кода Apple.Они делают это правильно.

...