测试已测试 | ✗ |
Lang语言 | Obj-CObjective C |
许可证 | MIT |
发布最新版本 | 2015年1月 |
由Denis Zamataev维护。
这是使用 nicklockwood 的 XMLDictionary 的另一种 'RestKit' XML 序列化的方式。
XMLDictionary 允许用户即时调整 XML 解析设置。使用 RKXMLDictionarySerialization 时,使用 [RKXMLDictionarySerialization sharedParser]
来实现。
注意,您根据 XML 节点的内部文本描述 RestKit 映射的方式略有特殊。XML 节点的内部文本属性命名 '__text'。这样做是为了使 XML 解析独特,以防止发生“属性名称与内部节点名称”冲突。
映射
<root>
<node>
barbarbar
</node>
</root>
变为
node.__text
安装完成后,在您的模型类中(或您处理 RestKit 设置的地方)注册序列化过程。
#import "RKXMLDictionarySerialization.h"
[RKMIMETypeSerialization registerClass:[RKXMLDictionarySerialization class] forMIMEType:RKMIMETypeTextXML];
[RKMIMETypeSerialization registerClass:[RKXMLDictionarySerialization class] forMIMEType:RKMIMETypeXML];
请注意,您可以为多个 MIME 类型注册该类,或使用匹配您希望注册的 MIME 类型的 NSRegularExpression。有关更多详细信息,请参阅 API 文档。
最有用的功能和这个解决方案存在的理由是,RKXMLReaderSerialization (https://github.com/RestKit/RKXMLReaderSerialization) 存在着 xml 节点属性名称和内部节点名称之间的冲突问题。
这样的 XML
<root>
<node body='regular'>
<body>
foobar
</body>
</node>
</root>
使用 RKXMLReaderSerialization 几乎不可能正确映射,但使用 RKXMLDictionarySerialization 可以轻松处理
并且在没有调整 XMLDictionary 设置或使用 XMLReader 解析后,它变成了某种奇怪的东西
root = {
node = {
body = (
regular,
{
"__text" = foobar;
}
);
};
};
但使用 XMLDictionarySerialization,您已经配置了 XMLDictionary,默认情况下以默认前缀名称来解析它,因此可以正确解析它
root = {
node = {
"_body" = regular;
body = {
"__text" = foobar;
};
};
};
因此,通过 RestKit 描述的对象映射应该注意属性名称,因为默认启用了前缀