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つ目の中に「円」と入っていました。)

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

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

全国に展開する居酒屋「鳥よし」グループの総帥を務めています。加盟店舗数2000軒突破(推定)。現在加盟店を絶賛募集中です。

このメンバーの記事をもっと読む
デザイン力×グローバルな開発体制でDXをトータル支援
お問い合わせ 会社概要DL