XMLReader-Arc 1.1

XMLReader-Arc 1.1

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2014年12月

未声明维护。



  • 作者:
  • Ryan Copley

XMLReader

此项目源自 Troy Brant 开发的组件,并在其网站上发布: http://troybrant.net/blog/2010/09/simple-xml-to-nsdictionary-converter/

我将开源对其进行的部分更新。

使用方法

NSData *data = ...; // some data that can be received from remote service
NSError *error = nil;
NSDictionary *dict = [XMLReader dictionaryForXMLData:data 
                                             options:XMLReaderOptionsProcessNamespaces 
                                               error:&error];

要求

因为项目使用了 "auto-synthesized property" 功能,所以需要 Xcode 4.4 及以上版本。

常见问题解答

有时我得到了一个 NSDictionary 而我需要得到一个 NSArray,这是为什么?

XMLReader 的算法中,当解析器找到一个新标签时,它会自动创建一个 NSDictionary。如果它在同一级别的 XML 树中找到相同标签的其他出现,它将创建另一个字典,并将两个字典都放入一个 NSArray 中。

结果是:如果您有一个只包含一个项目的列表,您将得到一个 NSDictionary 作为结果,而不是一个 NSArray。唯一的解决方案是使用 isKindOfClass: 检查字典中包含的对象的类。下面的示例代码展示了如何做:

NSData *data = ...;
NSError *error = nil;
NSDictionary *dict = [XMLReader dictionaryForXMLData:data error:&error];

NSArray *list = [dict objectForKey:@"list"];
if (![list isKindOfClass:[NSArray class]])
{
    // if 'list' isn't an array, we create a new array containing our object
    list = [NSArray arrayWithObject:list];
}

// we can loop through items safely now
for (NSDictionary *item in list)
{
    // ...
}

我没有在项目中启用 ARC,如何使用您的库?

您有两种选择:

  • 使用 "no-objc-arc" 分支,该分支使用手动引用计数。
  • 更好的选择:在构建阶段将 "-fobjc-arc" 编译器标志添加到 XMLReader.m 文件。

我有信任问题,我不想使用 ARC,我更喜欢 MRC,我能做什么?

嗯,没有人是完美的,但您仍然可以使用 "no-objc-arc" 分支。

贡献

感谢此组件的原始作者 Troy Brant 以及 Divan "snip3r8" Visagie 提供了对 ARC 的支持。

许可协议

版权(C)2012 Antoine Marcadet

在此特此授予任何人免费获得此软件及其相关文档文件(以下简称“软件”)的副本(以下简称“任何一方”),在不限制此软件的使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许软件的接收人有权这样做,但受以下条件限制:

所有副本或软件的实质性部分的副本中均应包含上述版权声明和本许可声明。

本软件按“现状”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何事件中,作者或版权所有者均不对任何索赔、损害或其他义务(包括但不限于因合同、侵权或其他行为而引起的索赔、损害或其他责任)承担责任,无论权利、损害或其他义务是否由此软件或其使用或其他方式产生、出现或与之相关。

Bitdeli Badge