2010-10-10 88 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