2013-02-20 105 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]; 
} 
相關問題