2013-02-20 57 views
0

我有一个web服务,其中有不同的数据库更改。当我消费web服务返回线与SQL标签,就像这样:如果标记有重音,NSXMLParser不会获取所有标记

<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:@""]; 
    } 
} 

这是好事,但如果Web服务返回一个字一个口音(重音,因为是西班牙语),应用程序只能得到重音后的短语。 例子: 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:@""]; 
} 

,并在maResultado在objectatindex唯一有此:

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

备注 - 请不要使用'stringWithFormat:',除非你真的有格式化字符串。这:'[maResultado addObject:[NSMutableString stringWithFormat:@“%@”,ResultadoSoap]];'应该是:'[maResultado addObject:ResultadoSoap];' – rmaddy 2013-02-20 19:29:10

回答

2

parser:foundCharacters:委托功能可以多次调用一个XML元素。如果字符内容包含特殊字符,则会发生这种情况。在你的情况下,

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

委托函数被调用两次数据,先用字符串

INSERT INTO DATOS(datos, fecha) VALUES('Indagar si el m 
以字符串

,然后再次

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

因此,你必须附加parser:foundCharacters:中的字符串添加到当前字符串中,例如

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