【问题标题】:'?' in strings breaking my XML parser“?”在破坏我的 XML 解析器的字符串中
【发布时间】:2011-06-14 10:43:26
【问题描述】:

当字符串中包含“?”时,对包含 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];

虽然我也许这不是它崩溃的地方。

非常感谢, -代码

【问题讨论】:

    标签: iphone objective-c xml-parsing


    【解决方案1】:

    很可能,问题不在于“?”字符,但 URL 中的 '&' 字符。 '&' 字符在 XML 中具有特殊含义(它用于启动像 &amp;amp;&amp;lt; 这样的实体),因此如果 XML 解析器找不到有效实体,它将失败。方法是按照 deanWombourne 的建议将值包装在 CDATA 部分中。

    【讨论】:

      【解决方案2】:

      试试这个。转成UTF8

      NSData *data = [myString dataUsingEncoding:NSUTF8StringEncoding];  
      

      然后用这个数据解析...

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

      【讨论】:

        【解决方案3】:

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

        1) 在从服务器发送之前对字符串进行百分比编码(您的 '?' 将变为 '%3F')并在您在应用程序中接收数据时解码数据。 - 查看this answer了解更多详情。

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

        【讨论】:

          猜你喜欢
          • 2012-10-10
          • 2013-03-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-04
          • 2021-06-03
          • 2014-10-19
          • 1970-01-01
          相关资源
          最近更新 更多