2010-10-10 67 views
1

如果我知道如何说出这句话,我可以在Google上找到答案。我需要一个XML解析器,我可以用它来调用其他XML解析器。轻松扩展Objective C XML解析器?

例如:

<car> 
    <driver> 
     <name /> 
     <age /> 
     <height /> 
    </driver> 
    <make> 
     <name /> 
     <nationality /> 
     <age /> 
    </make> 
    <engine> 
     <horsepower /> 
     <displacement /> 
     <mileage /> 
    </engine> 
</car> 

我需要解析器将开始解析汽车,去驱动,给所有驱动程序的一个单独的语法分析类,然后继续与化妆等

如果你认为它是一个状态机,我需要一个解析器,其中一些状态可以是不同的类。

+0

是否需要在iOS上运行?或OS X? – Thilo 2010-10-10 03:56:31

+0

iOS。目前使用NSXMLParser。 – 2010-10-10 19:02:18

回答

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; 
    } 
} 
+0

这正是我期待做的。谢谢。 – 2010-10-10 05:23:15