RKXMLDictionarySerialization 1.2.1

RKXMLDictionarySerialization 1.2.1

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最新版本2015年1月

Denis Zamataev维护。



  • 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 描述的对象映射应该注意属性名称,因为默认启用了前缀


follow button

endorse