NSXMLParser示例

我有这样的XML

<IS> <Value> <Signature>-804</Signature> <Amount>139</Amount> </Value> <Value> <Signature>-845</Signature> <Amount>639466</Amount> </Value> <Value> <Signature>-811</Signature> <Amount>16438344</Amount> </Value> <Value> <Signature>-1115</Signature> <Amount>-159733</Amount> </Value> </IS> 

现在我只想parsing这个特定的值。 例如,如何获得具有相应签名的节点的值为-804

请帮帮我..

我知道NSXMLParser的基础知识,但不知道如何获得条件parsing。

谢谢。

 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ currentKey = nil; [currentStringValue release]; currentStringValue = nil; if([elementName isEqualToString:@"Value"]){ //alloc some object to parse value into } else if([elementName isEqualToString:@"Signature"]){ currentKey = @"Signature"; return; } } - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ if(currentKey){ if(!currentStringValue){ currentStringValue = [[NSMutableString alloc] initWithCapacity:200]; } [currentStringValue appendString:string]; } } -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ if([elementName isEqualToString:@"Signature"] && [currentStringValue intValue] == 804){ ivar.signature = [currentStringValue intValue]; return; } } 

像这样的东西。 注意我没有在编译器上真的testing过这个代码,所以这里和那里会有语法错误。

您可能需要考虑使用TouchXML – https://github.com/mrevilme/TouchXML ,它提供了一些很好的XML处理function,包括使用XPATH,这使得您正在尝试做的更简单。

基于您的模型的假设示例:

 //first, load an XML document CXMLDocument *xmlDoc = [[CXMLDocument alloc] initWithXMLString:someXMLString options:0 error:&error]; //get node CXMLNode *amountNode = [xmlDoc nodeForXPath:@"//Value[@Signature='-804']/Amount" error:&error]; //or get actual value of node NSSString *amountString = = [[xmlDoc nodeForXPath:@"//Value[@Signature='-804']/Amount" error:&error] stringValue]; 

注意:这些exapmles没有被testing。

我发现TouchXML非常有用和紧凑。

希望这可以帮助。

实际上有两种parsingXML的方法 – 事件驱动的方法(如NSXMLParser使用的方法)和树方法(比如NSXML使用的方法)。

如果你只是在特定的元素之后,那么使用NSXML所使用的树方法可能会容易得多,因为它使你能够使用XPath来查询XML文档(事实上是XQuery)来返回特定的节点等你有兴趣

如果这听起来像是使用NSXMLParser遍历整个结构可能是一个更有成效的方法,那么我build议阅读Cocoa基于树的XML编程指南简介 。 (“查询XML文档”部分应特别感兴趣。)