【问题标题】:NSXMLParser init with XML in NSString formatNSXMLParser init 使用 NSString 格式的 XML
【发布时间】:2010-12-22 21:30:16
【问题描述】:

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

我正在通过 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 对象?

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

【问题讨论】:

    标签: iphone xml nsxmlparser


    【解决方案1】:

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

    NSData *data = [myString dataUsingEncoding:NSUTF8StringEncoding];
    

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

    【讨论】:

    • 谢谢 Philippe,我会马上试试这个。
    • 完美!正是我想要的。谢谢。
    【解决方案2】:

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

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

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

    我以前以这种方式通过NSStrings 的 XML 没有问题。

    不是专门针对这个问题,而是关于在 iPhone 上下文中解析 XML 的主题,您可能会发现 this blog entry of mine 也很有趣。

    【讨论】:

    • 它是可选的,是的,如果它只是 1.0/UTF-8,通常应该省略。尽管从技术上讲,XML 声明不是处理指令,尽管它看起来很像。
    • 是的,我认为有人会注意到这一点 - 想不出更好的方式来提及它 - 但准确性很重要,你是对的。
    • 谢谢菲尔:)我确实觉得这很有趣!尤其是你将一些 SAX 的东西向上包装到一个抽象级别,这肯定会派上用场。
    【解决方案3】:

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

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

    【讨论】:

    • 感谢您的建议/代码 notnoop!对于我的使用,我宁愿继续解析,但我想如果我将它传递给一个只接受“真实”xml的对象,这将是要走的路。
    猜你喜欢
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2012-02-13
    • 2012-09-02
    • 1970-01-01
    相关资源
    最近更新 更多