'?'在破坏我的XML解析器的字符串中

时间:2011-06-14 10:43:26

标签: iphone objective-c xml-parsing

当包含'?'的字符串时,解析包含XML的文件会中断。例如,您可以看到下面的一行。

<Radio id="32">
<stationName>BBC 5 Live</stationName>
<streamType>aac+</streamType>
<streamBandwidth>48kbps</streamBandwidth>
<streamURL>http://bbcmedia.ic.llnwd.net/stream/bbcmedia_he2_5live_q?s=1308038932&e=1308053332&h=868e4fa343b375695183f6a3bd0267d9</streamURL>
</Radio>

有没有办法对'?'进行编码?或者通常用来处理这类问题的方式是什么,正如我想象的那样会遇到很多问题。

处理此问题的代码行(我相信)是:

[aRadio setValue:currentElementValue forKey:elementName];

虽然我可能不是它破裂的地方。

非常感谢, -code

3 个答案:

答案 0 :(得分:0)

试试这个。将其转换为UTF8

NSData *data = [myString dataUsingEncoding:NSUTF8StringEncoding];  

然后解析这些数据......

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];

答案 1 :(得分:0)

有几种方法可以解决这个问题。

1)在从服务器发送之前对字符串进行百分比编码(您的'?'将变为'%3F')并在您的应用中收到时解码数据。 - 有关详细信息,请参阅this answer

2)在这一位数据周围使用CDATA标记 - see here了解更多详情

答案 2 :(得分:0)

最有可能的问题不是'?'性格,但'&amp;'您网址中的字符。 '&amp;' character在XML中具有特殊含义(它用于启动&amp;&lt;等实体),因此如果XML解析器找不到有效实体,则它将失败。要做的就是将值包装在CDA部分中,如deanWombourne建议的那样。