Проблемы com Parse XML - Iphone - PullRequest
0 голосов
/ 21 февраля 2011

Английский перевод не по ОП.Далее следует оригинал.

Джентльмен,

Я подключаюсь к веб-серверу и получаю файл XML следующего формата:

<?xml version="1.0" encoding="ISO-8859-1"?>
<programacao>
<agenda>
<data>17/02</data>
<cidade>Barueri</cidade>
<estado>SP</estado>
</agenda>
<agenda>
<data>19/02</data>
<cidade>Maringá</cidade>
<estado>PR</estado>
</agenda>
<agenda>
<data>17/03</data>
<cidade>Cubatão</cidade>
<estado>SP</estado>
</agenda>
</programacao>

Поканастолько хорошо.Но когда я пытаюсь разобрать это так:

-(id)loadXMLByURL:(NSString *)urlString
{
       minhaAgenda             = [[NSMutableArray alloc] init];
       NSURL *url              = [NSURL URLWithString:urlString];
       parser                  = [[NSXMLParser alloc] initWithContentsOfURL:url];
       parser.delegate = self;
       [parser parse];
       return self;
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSMutableString
*)elementName
 namespaceURI:(NSMutableString *)namespaceURI qualifiedName:
(NSMutableString *)qName attributes:(NSDictionary *)attributeDict
{
       if ([elementName isEqualToString:@"agenda"])
       {
               currentEvento = [Agenda alloc];
               currentNodeContent = [[NSMutableArray alloc] init];
       }
}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSMutableString
*)elementName namespaceURI:(NSMutableString *)namespaceURI
qualifiedName:(NSMutableString *)qName
{
       if ([elementName isEqualToString:@"agenda"])
       {
               [minhaAgenda addObject:currentEvento];
               [currentEvento release];
               currentEvento = nil;
               [currentNodeContent release];
               currentNodeContent = nil;
       }

   if ([elementName isEqualToString:@"cidade"])
   {
           currentEvento.cidade = currentNodeContent;
   }

   if ([elementName isEqualToString:@"estado"])
   {
           currentEvento.estado = currentNodeContent;
   }

   if ([elementName isEqualToString:@"data"])
   {
           currentEvento.data = currentNodeContent;
   }
}

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSMutableString*)string
{
    currentNodeContent = [string stringByTrimmingCharactersInSet:
    [NSCharacterSet whitespaceAndNewlineCharacterSet]];

    NSLog(@"%@", currentNodeContent);
}

... слова с ударениями усекаются.Я получаю несколько разрывов строк в журнале ... как слово Cubatão показывает как Cubat в одной строке и ão в следующей, или Maringá становится Maring в одной и á в следующей.

Я пробовал много разных вещей, но когда я помещаю их в табличное представление, все, что я получаю, это нарезанные кусочки.Что я могу сделать, чтобы решить эту проблему?


Оригинал

Senhores,

Estou realizando um conexão em um seridor web, acessando umarquivo XML no seguinte formato:

<?xml version="1.0" encoding="ISO-8859-1"?>
<programacao>
<agenda>
<data>17/02</data>
<cidade>Barueri</cidade>
<estado>SP</estado>
</agenda>
<agenda>
<data>19/02</data>
<cidade>Maringá</cidade>
<estado>PR</estado>
</agenda>
<agenda>
<data>17/03</data>
<cidade>Cubatão</cidade>
<estado>SP</estado>
</agenda>
</programacao>

Até aí tudo ok .. согласен quando faço o parser com o seguinte:

-(id)loadXMLByURL:(NSString *)urlString
{
       minhaAgenda             = [[NSMutableArray alloc] init];
       NSURL *url              = [NSURL URLWithString:urlString];
       parser                  = [[NSXMLParser alloc] initWithContentsOfURL:url];
       parser.delegate = self;
       [parser parse];
       return self;
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSMutableString
*)elementName
 namespaceURI:(NSMutableString *)namespaceURI qualifiedName:
(NSMutableString *)qName attributes:(NSDictionary *)attributeDict
{
       if ([elementName isEqualToString:@"agenda"])
       {
               currentEvento = [Agenda alloc];
               currentNodeContent = [[NSMutableArray alloc] init];


       }
}

-(void)parser:(NSXMLParser *)parser didEndElement:(NSMutableString
*)elementName namespaceURI:(NSMutableString *)namespaceURI
qualifiedName:(NSMutableString *)qName
{
       if ([elementName isEqualToString:@"agenda"])
       {
               [minhaAgenda addObject:currentEvento];
               [currentEvento release];
               currentEvento = nil;
               [currentNodeContent release];
               currentNodeContent = nil;

       }

   if ([elementName isEqualToString:@"cidade"])
   {
           currentEvento.cidade = currentNodeContent;
   }

   if ([elementName isEqualToString:@"estado"])
   {
           currentEvento.estado = currentNodeContent;
   }

   if ([elementName isEqualToString:@"data"])
   {
           currentEvento.data = currentNodeContent;
       }



}

    -(void)parser:(NSXMLParser *)parser foundCharacters:(NSMutableString
    *)string
    {

       currentNodeContent = [string stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];

       NSLog(@"%@", currentNodeContent);

}

Как palavras acentuadas ficam truncadas .. vejo quebradas emВарианты linhas no Log ... тип. Куба на внешней линии ão ... Maring e na outra linha á

Já tentei vários recursos, mas quando jogo na Table View как palavras acentuadas sicicam os pedaços.О, конечно, проблема разрешения?

Ответы [ 2 ]

1 голос
/ 21 февраля 2011

В -(void)parser:(NSXMLParser *)parser foundCharacters:(NSMutableString *)string вы устанавливаете currentNodeContent на string.Я полагаю, что вы захотите добавить string к currentNodeContent вместо его замены.


Португальский перевод

Нет метода -(void)parser:(NSXMLParser *)parser foundCharacters:(NSMutableString *)string vocêесть сетандо currentNodeContent пара в истории на string, в котором есть все, что нужно для этого.Provavelmente esse método é chamado separado quando o parser a a am a amento, por isso que os pedaços ficam separados.Você deveria fazer um append do currentNodeContent com a string ao invés de заместитель o que já tinha antes.

0 голосов
/ 21 февраля 2011

Я не говорю по-португальски, но я говорю по-испански, поэтому я думаю, что понимаю некоторые ваши проблемы.

Было бы намного лучше использовать библиотеку-оболочку для анализа XML-файлов, которая называется TouchXML .

Это очень удобно, если вам нужна дополнительная информация, оставьте комментарий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...