0

単純な XML ファイルがあります。ユーザー名とパスワードを取得したいだけです。しかし、結果を観察するためにnslogを使用していたときに、繰り返し値が生成されました。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 配信管理[4364:11003]

  Vincent

2012-05-02 19:47:27.620 配信管理[4364:11003]

2012-05-02 19:47:27.621 DeliveryManagement[4364:11003] 文字列 2012-05-02 19:47:27.622 DeliveryManagement[4364:11003] 文字列

2012-05-02 19:47:27.623 DeliveryManagement[4364:11003] 文字列 OK 2012-05-02 19:47:27.623 DeliveryManagement[4364:11003] 文字列 OK

2012-05-02 19:47:27.624 DeliveryManagement[4364:11003] 文字列 OK

2012-05-02 19:47:27.625 DeliveryManagement[4364:11003] 文字列 OK

2012-05-02 19:47:27.626 DeliveryManagement[4364:11003] 文字列 OK

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

4

1 に答える 1

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; にする必要があります。追記後。このように入ります

  • (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)文字列

しかし、そのnilなので値は追加されません。それがあなたを助けることを願っています..

于 2012-05-02T10:15:16.293 に答える