結構,まんどくさい.
どうやら,NSXMLDocumentの内部は,システムの文字コードで処理されるようなので,ちゃんと文字コードを変換してからパーサに突っ込んでやらないといけない.
また,一度でもNSStringに文字コードをシステムの文字コード以外で突っ込むと化け化けになるので,その辺もちゃんとしないといけない.
後,HTMLのようなちゃんとXML勧告に従っていないXML形式をパースする場合には,optionを指定する.optionの各形式は,こちらのページ参照.例えば,HTMLをパースするときは,NSXMLDocumentTidyHTMLになる.

- (void)hogehoge {
NSData *rssData = [hoge getXMLData];
// get data format is SHIFT-JIS
// convert it into UTF-8
NSString *decoded_strings = [[NSString alloc]
initWithData:rssData
encoding:NSShiftJISStringEncoding ];
// parse
[self parseXML:decoded_strings];
}
- (NSMutableArray*) parseXML:(NSString*)str {
NSError *err = nil;
NSXMLDocument *xmlDoc = [[[NSXMLDocument alloc]
initWithXMLString:str options:NSXMLDocumentTidyHTML
error:&err] autorelease];
// parsing is here
}

ただし,内部的には,UTF-8?でコードされているものと思いきや,なんかよくわからない.
XML内部の日本語データを出すときは,

[NSString stringWithCString:[strTag UTF8String] encoding:NSASCIIStringEncoding];

みたいにしてやらないといけない.
面倒くさすぎる.なんじゃこれ?