问题com解析XML - Iphone

时间:2011-02-21 19:20:26

标签: iphone xml parsing

英语翻译不是OP。原文如下。

君子,

我正在连接到Web服务器并获取具有以下格式的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 umconexãoemum servidor web,acessando um arquivo 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ítudook .. acontece quequandofaçooparser 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);

}

as palavras acentuadas ficam truncadas .. vejo quebradasemvárias linhas no Log ... tipo Cubat na outralinhaão... Maring e na outra linhaá

Játenteiváriosrecursos,mas quando jogo na Table View as palavras acentuadassóficamospedaços。 O que posso fazer para resolver esse problema?

2 个答案:

答案 0 :(得分:1)

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSMutableString *)string中,您将currentNodeContent设置为string。 我相信您要将string附加到currentNodeContent而不是替换它。


葡萄牙语翻译

Nométodo-(void)parser:(NSXMLParser *)parser foundCharacters:(NSMutableString *)stringvocêestásetandoo currentNodeContent para o que vem na string,mas fazendoissovocêperdeoquejáestavaláantes。 Provavelmenteessemétodoéchamadoseparado quando o parser acha um acento,por isso queospedaçosficamseparados。 Vocêdeveriafazer um append do currentNodeContent com a string ainvinçadesubstituir oquejátinhaantes。

答案 1 :(得分:0)

我不会说葡萄牙语,但我会说西班牙语,所以我想我理解你的一些问题。

使用包装器库来解析名为TouchXML的XML会更好。

它非常易于使用,如果您需要更多信息,请发表评论。