オウンドメディア成功の秘訣は「ロジカル×エモーショナル」。必要な戦略と事例を大公開!【PLAN-B×LIG共催セミナー】
オウンドメディア成功の秘訣は「ロジカル×エモーショナル」。必要な戦略と事例を大公開!【PLAN-B×LIG共催セミナー】
2010.05.10

NSXMLParserでハマった事

鳥よし

NSXMLParserを使用してXMLの解析をする部分で、使用方法を勘違いしていてハマったのでメモ。

下記メソッドで要素開始タグを検出し、

-(void) parser:(NSXMLParser *) parser 
didStartElement:(NSString *) elementName 
  namespaceURI:(NSString *) namespaceURI 
 qualifiedName:(NSString *) qName
	attributes:(NSDictionary *) attributeDict {

下記メソッドでタグ内の要素を検出して、

-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string
{

下記メソッドで要素終了タグを検出していた。

-(void)parser:(NSXMLParser *)parser 
didEndElement:(NSString *)elementName 
 namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qName
{

この際に、2番目のメソッド内にて検出した値をそのまま配列に入れて使おうとしたところ、
どうも「1980円」等の文字が、配列の1つ目の中に「1980」、2つ目の中に「円」と入ってしまって、うまく行かなかった。

調べてみたところ、どうやら2番目のメソッドが呼ばれた時点では、引数のstringに全て入っていないという。
と言う訳で、2番目のメソッド内にてNSMutableStringに結合していき、3番目のメソッドにて要素終了タグを検知した時に配列にしまうようにしたところうまく行くようになった。

確かに、そうでないと要素終了タグを検出する意味もあまりなかったような気がしてきます。
(正確には、しっかり検知してなかったので配列の1つ目の中に「1980」、2つ目の中に「円」と入っていました。)

これで、次回からはこの問題でハマる事もなさそうです。