【问题标题】:Easily extendable Objective C XML parser?易于扩展的 Objective C XML 解析器?
【发布时间】:2010-10-10 03:53:59
【问题描述】:

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

例如:

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

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

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

【问题讨论】:

  • 它需要在iOS上运行吗?还是 OS X?
  • iOS。当前使用 NSXMLParser。

标签: objective-c xml parsing


【解决方案1】:

如果您使用的是 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;
  }
}

【讨论】:

  • 这正是我想要做的。谢谢。
猜你喜欢
  • 2014-06-28
  • 2011-07-01
  • 2010-12-27
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多