ネットで検索してもStackOverflowにしか情報が無かったので備忘録代わりに投稿しました。
ニュースアプリを製作しているときに引っかかったのが、xmlのCDATAセクションでした。
CDATAセクションとは、以下のサンプルのものを言います。
CdataSample.xml
<description><![CDATA[<p><img src="http://xxxxxx.jpg" width="640" height="360"/>]]></description>
CDATAセクションの中にはHTMLタグも埋め込むことができるので、RSSを配信している側にとっては便利なんですが、XMLパーサーを回避するので、XML解析する側にとっては嫌な存在です。ただ、NSXMLParserにはCDATAを解析するメソッドが用意されています。
XmlParser.m
-(void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock{
// CDATAの中身をUTF-8にエンコーディングする。
NSString *string = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
}
このメソッドはNSXMLParserを使うときにCDATAを扱える唯一の手段なのですが、デメリットとして[elementName isEqualToString:@"item"]のようにタグを検索できないので、私はNSRangeを使って解析しています。面倒ですが、正規表現の練習と思って頑張りましょう。
引用:Reading CDATA Sections parsing XML in Objective C(StackOverflow)