使用NSXmlParser解析XML文件时获取重复值

时间:2012-05-02 05:20:18

标签: ios nsxmlparser

我有一个简单的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 DeliveryManagement [4364:11003]

  Vincent

2012-05-02 19:47:27.620 DeliveryManagement [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]       串       好 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 DeliveryManagement [4364:11003]       串       行

2012-05-02 19:47:27.626 DeliveryManagement [4364:11003]       串       行

2012-05-02 19:47:27.626 DeliveryManagement [4364:11003]       串       行

2012-05-02 19:47:27.627 DeliveryManagement [4364:11003]       串       行

2012-05-02 19:47:27.628 DeliveryManagement [4364:11003]节点被正确找到 2012-05-02 19:47:27.642 DeliveryManagement [4364:11003]       串       行

1 个答案:

答案 0 :(得分: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 *)解析器foundCharacters:(NSString *)string

但是它的nil没有附加值。希望它可以帮助你..