NSXMLParser委托处理属性

时间:2011-10-12 01:16:07

标签: iphone ios delegates nsxmlparser

我目前正在尝试让我的解析器委托使用我为我收到的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)

我特别想帮助尝试完成第二种方法并使其全部正常工作。

到目前为止,所有的帮助都非常受欢迎。

3 个答案:

答案 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!