基本上我想编写一个类来解析我的iphone应用程序的XML文档。
这是解析新闻源的解析器的头文件
@interface NewsXML : NSObject<NSXMLParserDelegate>
{
@private
NSXMLParser *xmlParser;
NSString *currentElement;
NSMutableString *currentTitle;
NSMutableString *currentDate;
NSMutableString *currentDetail;
NSMutableString *currentImageURL;
NSMutableString *currentThumbnailURL;
NSMutableString *currentAlt;
}
@property (nonatomic, assign) NSObject<NewsXMLDelegate> *delegate;
@property (nonatomic, strong) NSMutableArray *newsItems;
@property (nonatomic, strong) NSURL *url;
- (void)fetch;
@end
有一个数组'newsItems',它在调用方法'fetch'后保存从XML中获取的对象。
但是我想解析的程序中有几种类型的XML文件。每种类型的XML文件都有不同的字段。 (例如:标题,日期,细节等)
我创建了不同的类(例如,NewsItem,FooItem,AbcItem)来保存来自不同XML文件的Items。
我仍然无法弄清楚如何使这个XML Parser类更通用,以便项目的NSMutableArray可以为每种情况保存不同类型的项目(NewsItem,FooItem ..)。现在我需要为每个xml文件编写不同的XML解析器类。
那么如何以更一般的方式做到这一点?
修改
很抱歉不清楚..当解析器解析每个项目时,它将创建一个新对象,如'NewsItem','FooItem'用于保存数据,然后将其添加到数组中。但是,解析器类不应该知道这些类的存在(因为稍后将添加越来越多的项类)。那么这个xml解析器类如何创建正确的对象并将它们正确地添加到数组中呢?有没有办法用项的类初始化解析器类?
答案 0 :(得分:2)
在阅读你的评论之后,我认为你所想到的是一个很好的课程设计。我认为XML解析器应该简单地以标准方式解析XML并且总是返回相同的东西,并且您的类(例如NewsItem,FooItem等)应该知道如何使用解析的XML创建自己。这更加强大。
我在我制作的几个应用程序中执行此操作。我的NewsItem或FooItem类实现了如下所示的函数:
- (id)initWithXMLData:(NSDictionary *)xmlDataDictionary {
self.fooVar = [xmlDataDictionary objectForKey@"xmlParsedKey"];
//And so on for whatever you need to set from the xml data
}
这样,XML解析数据总是相同的(您不会更改XML解析器),如果您需要类以不同方式处理数据,您可以更改类'自己的initWithXMLData
函数,而不是更改XML解析器。 XML解析器永远不需要知道任何其他类的存在。