易于扩展的Objective C XML解析器?

时间:2010-10-10 03:54:00

标签: objective-c xml parsing

如果我知道如何表达这一点,我可能会在Google上找到答案。我需要一个XML解析器,我可以使用。

调用其他XML解析器

例如:

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

我需要解析器,它将开始解析Car,获取驱动程序并将所有驱动程序提供给单独的解析器类,然后继续使用make等。

如果您将其视为状态机,我需要一个解析器,其中某些状态可以是不同的类。

1 个答案:

答案 0 :(得分: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;
  }
}