Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 易于扩展的Objective C XML解析器?_Objective C_Xml_Parsing - Fatal编程技术网

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

Objective c 易于扩展的Objective C XML解析器?,objective-c,xml,parsing,Objective C,Xml,Parsing,如果我知道如何表达,我可能会在谷歌上找到答案。我需要一个XML解析器,我可以用它调用其他XML解析器 例如: <car> <driver> <name /> <age /> <height /> </driver> <make> <name /> <nationality />

如果我知道如何表达,我可能会在谷歌上找到答案。我需要一个XML解析器,我可以用它调用其他XML解析器

例如:

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

我需要一个解析器,它将开始解析Car,找到Driver并将所有的Driver交给一个单独的解析器类,然后继续make,等等


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

如果您使用的是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:...]
  }
}
然后在处理完另一个委托(在DriverDelegate的类中)后将其更改回:


如果使用的是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:...]
  }
}
然后在处理完另一个委托(在DriverDelegate的类中)后将其更改回:


它需要在iOS上运行吗?或者OSX?iOS。当前正在使用NSXMLParser。它是否需要在iOS上运行?或者OSX?iOS。目前正在使用NSXMLParser。这正是我想要做的。谢谢。这正是我想要做的。谢谢