NSXMLParser委托处理属性

我目前正试图让我的parsing器委托工作与我已经创build的xml的属性我正在接受的自定义NSObject ..

这是正在读入我的parsing器代表的XML

 <Rows> <Row SKATERID="706" MANUFACTURER="GAZ" ISFACT="F" ISSKATE="F"/> <Row SKATERID="318" MANUFACTURER="MAN" ISFACT="F" ISSKATE="T"/> //... </Rows> 

这就是我对我的-parser:didStartElement:namespaceURI:qualifiedName:attributes: method:

 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { if ( [elementName isEqualToString:@"Row"]) { manufactureNSObject = [[ManufactureNSObject alloc] init]; manufactureNSObject.ISFACT = [attributeDict objectForKey:@"ISFACT"]; manufactureNSObject.ISSKATE = [attributeDict objectForKey:@"ISSKATE"]; manufactureNSObject.MANUFACTURER = [attributeDict objectForKey:@"MANUFACTURER"]; manufactureNSObject.SKATERID = [attributeDict objectForKey:@"SKATERID"]; NSLog(@"%@ %@ %@ %@", manufactureNSObject.ISFACT, manufactureNSObject.ISSKATE, manufactureNSObject.MANUFACTURER, manufactureNSObject.SKATERID); } } 

我的NSLog打印出所有正确的值罚款,我坚持的下一个部分是- parser:didEndElement:namespaceURI:qualifiedName:方法,除了didEndElement正在通过正确…没有什么,这是我的那个方法。

 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { NSLog(@"%@", elementName); NSLog(@"%@", namespaceURI); NSLog(@"%@", qName); } 

这是我的输出从NSLog的样子。

 2011-10-13 10:04:16.529 Code[52605:207] FF GAZ 76 2011-10-13 10:04:16.531 Code[52605:207] Row 2011-10-13 10:04:16.535 Code[52605:207] (null) 2011-10-13 10:04:16.537 Code[52605:207] (null) 2011-10-13 10:04:16.537 Code[52605:207] FT MAN 38 2011-10-13 10:04:16.538 Code[52605:207] Row 2011-10-13 10:04:16.539 Code[52605:207] (null) 2011-10-13 10:04:16.540 Code[52605:207] (null) 

我特别想要帮助完成第二种方法,并使这一切正常工作。

迄今为止所有的帮助都非常感谢。

对于正在parsing的xml文件types,

 parser:foundCharacters: 

从来没有被称为。 这种委托方法在这种情况下被调用:

 <mytag>这是标签内容</ mytag>

而在你的情况下,只有属性存在,没有标签内容,即:

 <mytag attr1 =“value1”attr2 =“value2”> </ mytag>

至于另一种方法:

 parser:didEndElement: 

它的实现取决于你。 例如,如果你将一个元素存储在一个临时variables中,那么这个方法在另一个数据结构中复制这个variables是有用的。

创build一个接口NSMutableString ,你可以将string从parser:foundCharacters传入。 从那里,实现一个类似于parser:didStartElement:结构parser:didStartElement:只有这一次,您将使用该NSMutableString并将其值传递给由正在closures的元素表示的对象。

只要有人在将来检查这个页面,我已经find了如何做到这一点

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K like %@",@"MANUFACTURER",cell.textLabel.text]; NSArray *filterArray = [myDataArray filteredArrayUsingPredicate:predicate]; [[self delegate] setManufactureSearchFields:filterArray withIndexPath:indexPath]; //This is where I pass the value back to the mainview 

谓词是你的朋友..他们也擅长从字典中分离出你想要的值…

繁荣!