2009-12-03 70 views
9

我刚刚遇到了这个,似乎无法从文档中得到任何明确的答案。NSString格式的XML NSXMLParser init

我通过HTTPS连接检索一些XML。我做了各种各样的身份验证等,所以我有一组类来处理这个问题。 其结果是,变为像一个NSString:

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

这意味着,不存在编码=“UTF-8”缩进=“是”方法=“XML”或其它报头块,以指示这是实际的XML,而不仅仅是一个NSString。我想我将使用[NSXMLParser initWithData:NSData]来构造解析器,但是我将如何格式化或将我的NSString的xml格式文本转换为NSXMLParser将理解和解析的适当的NSData对象?

希望这是有道理的,谢谢你给任何帮助:)

回答

29

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

NSData *data = [myString dataUsingEncoding:NSUTF8StringEncoding]; 

您可以再喂这的NSXMLParser。

+0

感谢菲利普,我会尝试了这一点,立竿见影。 – RickiG 2009-12-03 20:57:06

+0

完美!正是我在找的东西。谢谢。 – 2012-06-13 03:03:06

1

的时候NSXMLParser有这几乎是将要期待它是XML ;-)

数据我敢肯定的处理指令头部就是在这种背景下可选。您将NSString加入NSData的方式将决定编码(使用dataUsingEncoding:)。

(编辑:我一直在寻找的编码枚举,但菲利普Leybaert打我吧,但无论如何,在这里重复了,是这样的:[nsString dataUsingEncoding:NSUTF8StringEncoding]

我通过NSString小号XML以这种方式之前没有问题。

这个问题并非特定于此问题,而是针对iPhone上下文中的XML解析主题,您可能会发现this blog entry of mine也很有趣。

+0

这是可选的,是的,如果它只是1.0/UTF-8,通常应该省略。尽管技术上XML声明不是一个处理指令,尽管它看起来像一个。 – bobince 2009-12-03 16:30:31

+0

是的,我认为有人会接受这一点 - 想不到一个更好的方式来提及它 - 但准确性是重要的,你是对的。 – philsquared 2009-12-03 16:53:52

+0

谢谢你菲尔:) 我确实觉得它很有趣!特别是你将SAX的某些东西向上抽象为抽象层次,这一定会派上用场。 – RickiG 2009-12-03 20:53:52

1

标头是可选的,但你可以根据需要自己插入相应的标题:

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]; 
+0

感谢您的建议/ code notnoop! 对于我的用途,我宁愿继续解析,但我想如果我将它传递给只接受“真正”xml的对象,这将是一条路。 – RickiG 2009-12-03 20:56:15