如果标签有口音,NSXMLParser不会获得所有的标签

我有一个Web服务与数据库不同的变化。 当我使用sql标签消费webservice返回行,如下所示:

<sql> DELETE FROM TABLE WHERE ... </sql> <sql> INSERT INTO TABLE WHERE ... </sql> <sql> UPDATE TABLE SET ... WHERE ... </sql> 

我将这些代码保存在NSMutableArray中,如下所示:

 -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if ([elementName isEqualToString:@"sql"]){ [maResultado addObject:[NSMutableString stringWithFormat:@"%@", ResultadoSoap]]; [ResultadoSoap setString:@""]; } } 

这很好,但是如果webservice返回一个带重音的单词(由于是西class牙语的重音),应用程序只能得到重音后的短语。 例如:web服务返回这个:

 <sql> INSERT INTO DATOS(datos, fecha) VALUES('Indagar si el médico a tenido oportunidad de ...', '20/02/2013') </sql> 

我这样做:

 if ([elementName isEqualToString:@"sql"]){ [maResultado addObject:[NSMutableString stringWithFormat:@"%@", ResultadoSoap]]; [ResultadoSoap setString:@""]; } 

而在objectResdex中的maResultado只有这个:

 édico a tenido oportunidad de ...', '20/02/2013') 

parser:foundCharacters:可以为XML元素多次调用delegate函数。 如果字符内容包含特殊字符,则会发生这种情况。 在你的情况下,为数据

 <sql> INSERT INTO DATOS(datos, fecha) VALUES('Indagar si el médico a tenido oportunidad de ...', '20/02/2013') </sql> 

委托函数被调用两次,首先与string

 INSERT INTO DATOS(datos, fecha) VALUES('Indagar si el m 

然后再与string

 édico a tenido oportunidad de ...', '20/02/2013') 

因此,你必须在parser:foundCharacters: 追加stringparser:foundCharacters:到当前string,例如

 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { [currentElementValue appendString:string]; }