我目前正在尝试让我的解析器委托使用我为我收到的xml的属性创建的自定义NSObject
。
这是正在读入我的解析器代理的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:
方法的看法:
- (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
s。
2011-10-13 10:04:16.529 Code[52605:207] F F 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] F T 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)
我特别想帮助尝试完成第二种方法并使其全部正常工作。
到目前为止,所有的帮助都非常受欢迎。
答案 0 :(得分:3)
对于要解析的xml文件类型,永远不会调用
parser:foundCharacters:
。在这种情况下调用此委托方法:
<mytag>this is the tag content</mytag>
虽然在您的情况下只存在属性且没有标记内容,即:
<mytag attr1="value1" attr2="value2"></mytag>
就其他方法而言:
parser:didEndElement:
它的实施取决于你。例如。如果将元素存储在临时变量中,则此方法可用于将此变量复制到另一个数据结构中。
答案 1 :(得分:1)
创建一个接口NSMutableString
,您可以将字符串从parser:foundCharacters
传递到。{1}}。从那里开始,实现与parser:didStartElement:
中的NSMutableString
类似的结构,你将使用{{1}}并将其值传递给由被关闭的元素表示的对象。
答案 2 :(得分:0)
如果有人在将来检查此页面,我发现了如何做到这一点
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
谓词是你的朋友......他们也擅长从字典中隔离你想要的值......
BOOM!