如果我知道如何表达这一点,我可能会在Google上找到答案。我需要一个XML解析器,我可以使用。
调用其他XML解析器例如:
<car>
<driver>
<name />
<age />
<height />
</driver>
<make>
<name />
<nationality />
<age />
</make>
<engine>
<horsepower />
<displacement />
<mileage />
</engine>
</car>
我需要解析器,它将开始解析Car,获取驱动程序并将所有驱动程序提供给单独的解析器类,然后继续使用make等。
如果您将其视为状态机,我需要一个解析器,其中某些状态可以是不同的类。
答案 0 :(得分:4)
如果您使用的是NSXMLParser,则可以在找到元素时切换代理:
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"driver"]) {
parser.delegate = driverDelegate;
driverDelegate.parentDelegate = self;
// Maybe call [driverDelegate parser:didStartElement:...]
}
}
然后在完成另一个委托时(在driverDeleagate的类中)将其更改回来:
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"driver"]) {
parser.delegate = parentDelegate;
}
}