【发布时间】:2012-01-05 13:00:53
【问题描述】:
我很可能最终会回答我自己的问题,因为我需要先修复这个错误,然后才能继续,但它在这里是为了文档目的。注意:我没有像我发现的所有其他问题/答案一样使用 SAX 解析器。
NSMutableData* data = ...
NSXMLNode* nodeCDATA= [[NSXMLNode alloc] initWithKind:NSXMLTextKind options:NSXMLNodeIsCDATA];
[nodeCDATA setObjectValue:data];
NSAssert([nodeCDATA.objectValue isKindOfClass:[NSData class]], @"NSXMLNode setObjectValue didn't use a NSData");
需要注意的是,在同一个函数中,最后的 NSAssert 不会触发。 然而,在将 xml 发送到服务器后,我得到一个 NSString 作为返回类型。
NSXMLNode* nodeCDATA= [dx childAtIndex:0];
id obj= nodeCDATA.objectValue;
if (![obj isKindOfClass:[NSData class]])
NSLog(@"Why am I getting a %@ returned from a CDATA section!?",[obj class]);
输出是...
2012-01-05 13:58:29.336 auth[18773:1f03] Why am I getting a __NSCFString returned from a CDATA section!?
感谢您的帮助。
===== 更新 =====
问题仍然悬而未决。我发现的最佳解决方案是找到一个外部 base64 加密解决方案,将 NSMutableData 编码为 NSString,然后使用 setStringValue。然后我用base64的decrypt对stringValue返回的字符串进行解密,避免了这个问题。
确切地说,我现在使用来自http://www.cocoadev.com/index.pl?BaseSixtyFour 的 - (NSString *)base64Encoding 来对它进行 jimmy 装配,但我很可能会将 NSData 字节的原始写入实现为 BSON 格式,看看是否会削减它。我读到 base64 使数据大小增加了大约 33%,我想如果可能的话我想避免这种情况。
上述解决方案仍然非常受欢迎。
=== 更多更新 ===
我研究过的一些选项是 DTD 和 XSL。很久以前,MSXML.dll 中也存在同样的问题。如果我可以分配一个 DTD 或进行 XSL 转换以使 Apple API 相信我的数据是我希望返回为 NSData 的 base64 字符数据,那就太好了。有人有这方面的代码吗?我确实在 DTD 中发现了 xs:base64Binary 标记的非规范使用,但我还没有尝试过 Apple ID 是否接受它。太多的工作只是为了看看它是否有效。
【问题讨论】:
标签: objective-c xml dom cdata