如何在同一个文件中使用NSXMLParser解析2个URL?

时间:2012-01-12 10:27:44

标签: iphone ipad nsxmlparser

如何在同一个文件中使用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
    }
}

帮助我找到一种区分方法。

4 个答案:

答案 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的独立对象并分配标签,并在委托功能中检查标签并根据标签指定值。