10

我刚碰到这个,似乎无法从文档中得到任何明确的答案。

我通过 HTTPS 连接检索一些 XML。我做了各种身份验证等,所以我有一组类以一种很好的线程方式处理这个问题。结果是一个类似于以下内容的 NSString:

<response>
//some XML formatted test
</response>

这意味着没有 encoding="UTF-8" indent="yes" method="xml" 或其他标头块来表明这是实际的 XML 而不仅仅是 NSString。

我想我将使用 [NSXMLParser initWithData:NSData] 来构造解析器,但是我将如何将我的 NSString 的 xml 格式文本格式化或转换为 NSXMLParser 将理解和解析的正确 NSData 对象?

希望这是有道理的,感谢您提供的任何帮助:)

4

3 回答 3

31

您可以使用 dataUsingEncoding 方法将字符串转换为 NSData 对象:

NSData *data = [myString dataUsingEncoding:NSUTF8StringEncoding];

然后,您可以将其提供给 NSXMLParser。

于 2009-12-03T16:17:58.920 回答
2

标题是可选的,但如果需要,您可以自己插入适当的标题:

NSString *header = @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
NSString *xml = [NSString stringWithFormat:@"%@\n%@", header, response);
NSData *data = [xml dataUsingEncoding:NSUTF8StringEncoding];
NSXMLParser *praser = [NSXMLParser initWithData:data];
于 2009-12-03T16:19:39.230 回答
1

NSXMLParser有数据的时候,它几乎会期望它是 XML ;-)

我很确定处理指令头在这种情况下是可选的。你NSString进入的NSData方式将决定编码(使用dataUsingEncoding:)。

(编辑:我一直在寻找编码枚举,但 Philippe Leybaert 击败了我,但无论如何要在这里重复它,例如[nsString dataUsingEncoding:NSUTF8StringEncoding]:)

我以前NSString以这种方式传递了 XML,没有任何问题。

不是专门针对这个问题,而是关于 iPhone 上下文中 XML 解析的主题,您可能会发现我的这个博客条目也很有趣。

于 2009-12-03T16:18:17.627 回答