如何在同一个文件中使用NSXMLParser解析2个URL?我试过这样的话:
[self parseXMLFileAtURL:url1];
[self parseXMLFileAtURL:url2];
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
//here both url's returns the same data (element names are same), so how will I differentiate data between first URL & second URL.
if(url1 data) {
//do something
}
if(url2 data) {
//do something
}
}
帮助我找到一种区分方法。
答案 0 :(得分:1)
我不会。这是不必要的。我将有两个单独的NSXMLParserDelegate处理每一个。或者我会修改你当前的类来一次处理一个文件,并有2个实例。
您可以在该类中创建一个单独的委托类,如果这是您喜欢的。
例如:
@implementation YourCurrentClass
@end
@interface ParserDelegate : NSObject <NSXMLParserDelegate>
@end
@implementation ParserDelegate
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI: (NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
}
@end
使用多个ParserDelegate实例作为解析的委托。然后有一些其他代码在完成处理后检查它们的结果。
答案 1 :(得分:1)
我不确定,但您可以先将URL对象添加到数组中,然后再按照数组元素而不是URL1&amp; URL2。你可以试试这个:
NSString *obj;
NSMutableArray *urlArray;
[urlArray addObject:url1];
[urlArray addObject:url2];
解析器方法中的:
int i=[[urlArray objectAtIndex:obj] intValue];
switch(i){
case 0:
// we have url1 here
//do something with it
break;
case 1:
// we have url2 here
//do something...
break
}
我希望这种观点有所帮助..
答案 2 :(得分:0)
第一个名为parser
的参数是当前使用的解析器实例
这是了解您当前正在解析哪个文件的方法。
Alloc / init两个独立的NSXMLParser
实例,并开始用。解析你的两个文件
假设它们是 ivar ,一个简单的==
测试会告诉你使用了哪一个。
Here是类似问题的链接。
答案 3 :(得分:0)
创建2个NSXMLParser的独立对象并分配标签,并在委托功能中检查标签并根据标签指定值。