2012-05-02 2 views
0

У меня есть простой XML-файл. Я просто хочу получить имя пользователя и пароль. Но он генерирует повторяющееся значение, когда я использовал nslog для наблюдения за результатом. структура XML-это так же, как это:Получите повторное значение при использовании NSXmlParser для анализа XML-файла

<Login xmlns="http://tempuri.org/"> 
    <userName>Vincent</userName> 
    <password>string</password> 
    <status>OK</status> 
</Login> 



- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if ([elementName isEqualToString:@"userName"]) { 
     NSLog(@"Node is found correctly"); 
    } 
} 


- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if (!userNameString) { 
     userNameString=[[NSMutableString alloc]init]; 
    } 
    [userNameString appendString:string]; 
    NSLog(@"%@",userNameString); 
} 


- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError 
{ 
    NSInteger errorCode=[parseError code]; 
// NSLog(@"%d,%@",errorCode,[parseError localizedDescription]); 
} 


- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if ([elementName isEqualToString:@"userName"]) { 
     userNameString=nil; 
    } 
} 

Вот результат, который был сгенерирован NSLog:

2012-05-02 19: 47: 27,620 DeliveryManagement [4364: 11003]

Vincent 

2012-05-02 19: 47: 27,620 DeliveryManagement [4364: 11003]

2012-05-02 19: 47: 27,621 DeliveryManagement [4364: 11003] строка-05-02 19: 47: 27,622 DeliveryManagement [4364: 11003] Строка

2012-05-02 19: 47: 27,623 DeliveryManagement [4364: 11003] строка ОК 2012-05-02 19 : 47: 27,623 DeliveryManagement [4364: 11003] строка ОК

2012-05-02 19: 47: 27,624 DeliveryManagement [4364: 11003] строка ОК

2012-05-02 19:47 : 27.625 Управление доставкой [4364: 11003] ул. кольцо ОК

2012-05-02 19: 47: 27,626 DeliveryManagement [4364: 11003] строка ОК

2012-05-02 19: 47: 27,626 DeliveryManagement [4364: 11003] строка OK

2012-05-02 19: 47: 27,627 DeliveryManagement [4364: 11003] строка OK

2012-05-02 19: 47: 27,628 DeliveryManagement [4364: 11003] Узел найден правильно 2012-05-02 19: 47: 27,642 DeliveryManagement [4364: 11003] строка OK

+0

Вам нужно будет показать код, в котором вы разбираете документ XML, прежде чем кто-нибудь сможет вам помочь. – jonkroll

+0

Извините, я вставил кодировку для синтаксического анализа XML. –

ответ

0
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
if ([elementName isEqualToString:@"userName"]) { 
    NSLog(@"Node is found correctly"); 
    if(userNameString == nil) 
     userNameString = [NSMutableString string]; 
    else 
     [userNameString setString:@""]; 
} 
else { 
    userNameString = nil; 
} 

} 


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

[userNameString appendString:string]; 
if (userNameString) 
{ 
    userNameString = nil; 
} 
NSLog(@"%@",userNameString); 
} 

просто добавить этот код и он должен работать. в основном повторяющиеся значения из-за символа '\ n' после каждого значения. поэтому нам нужно сделать userNameString = nil; после добавления. таким образом, он переходит в

  • (аннулируется) анализатор: (NSXMLParser *) парсеры foundCharacters: (NSString *) струнных

но ноль так значения не прилагаемое. надеюсь, вам это поможет.

+0

PLZ Позвольте мне knw, если он работал на u ... thnx –

Смежные вопросы