2014-04-14 47 views
0

我想分析了“比较”里面的html标签内容节点解析锚标签和使用NSXMLParse

<comparison> 
    <a href="/cgi-bin/amazon.cgi?B0050AMJYU">Amazon.com</a> 
    ($34.36) | 
    <a href="/cgi-bin/walmart.cgi?16904483">Walmart.com</a> 
    ($34.36) | 
    <a href="/cgi-bin/rakuten.cgi?219782579">Rakuten.com</a> 
    ($34.36) | 
    <a href="/cgi-bin/bestbuy1.cgi?mp1307815397">BestBuy.com</a> 
    ($34.36) 
</comparison> 

我得到的输出是:

BestBuy.com ($34.36) 

预期的输出:

Amazon.com ($34.36) 
Walmart.com ($34.36) 
Rakuten.com ($34.36) 
BestBuy.com ($34.36) 

但我想显示所有的四个项目。

CODE

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 
    currentElementValue = [NSMutableString string]; 
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
    if ([elementName isEqualToString:@"item"]) { 
     dealsListObj = [[DealsParsingObjects alloc] init]; 
    } 

} 

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

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
    if ([elementName isEqualToString:@"short_title"]) { 
     dealsListObj.itemTitle = currentElementValue; 
     currentElementValue = nil; 
    } 
    else if ([elementName isEqualToString:@"final_price"]) { 
     dealsListObj.price = currentElementValue; 
     currentElementValue = nil; 
    } 
    //Detail view 
    else if ([elementName isEqualToString:@"merchant"]) { 
     dealsListObj.itemMerchant = currentElementValue; 
     currentElementValue = nil; 
    } 
    else if ([elementName isEqualToString:@"getdeal"]) { 
     dealsListObj.itemGetDeal = currentElementValue; 
     currentElementValue = nil; 
    } 
    //comparison 
    else if ([elementName isEqualToString:@"comparison"]) { 
     dealsListObj.comparison = currentElementValue; 
     currentElementValue = nil; 

    } 
    else if ([elementName isEqualToString:@"item"]) { 
     [resultArray addObject:dealsListObj]; 
     [dealsListObj release]; 
     dealsListObj = nil; 
     currentElementValue = nil; 
    } 
} 
+0

什么是您的解析代码? – Larme

回答

0

看来你有一个DealsParsingObjects类称为commentsArrayNSMutableArray。当解析开始读取<comparison>元素时,您将实例化该数组。

但是,当解析器读取<comparison>元素时,可以将该值分配给名为comparison的属性;它不会被添加到数组中。作为默认NSString属性(我的假设),每次解析器完成读取<comparison>元素时,它都会被重新分配。

编辑:

parser:didStartElement:...被称为每当一个新的元素读取时间。这也适用于<a>标签。在该方法中,您重置currentElementValue。因此,对于每个<a>,该值基本上重置为空字符串。只有最后一个读取值保留,这是最后一个<a>标记的值加上结尾的文本。

+0

我删除了那部分,并没有使用。 – Warrior

+0

请参阅编辑... – fguchelaar