NSXMLParserで指定したタグの取得ってどうするの?

NSXMLParserって、SAXパーザだからXPathとかDomとか使えないもんだから、HTMLとかXMLを読み込ませたときにあのElementの値を取りだしたいのになぁと思う時があってさ。
で、どうすんのかなぁって。

呼び出されるコールバック関数内で、XPATHっぽいのを作成して、んでそれでなんとかできるかなぁと思て作ってみてる。

  NSMutableString *path = [NSMutableString stringWithString:elementName];
  NSString *t;
  if(t = [attributeDict objectForKey:@"id"]){
    [path appendString:[NSString stringWithFormat:@"[@id='%@']",t]];
  }else if(t = [attributeDict objectForKey:@"class"]){
    [path appendString:[NSString stringWithFormat:@"[@class='%@']",t]];
  }else if([elementCount intValue] > 1){
  [path appendString:[NSString stringWithFormat:@"[position()==%d]",[elementCount intValue]]];
  }
  [pathArray addObject:path];

開始タグを検出したら実行されるコールバックで↑の処理を行って

XPATHっぽいのは↓で生成する。

 [NSString pathWithConponents:pathArray];

終了タグを検出したら↓の処理を行う

  [pathArray removeLastObject];

あとは、このオブジェクトにさらにDelegateを設定して、処理を行わせるとか。
というところで、試しに携帯百景のHTMLを読み込んでみたのだけどもparseErrorになっちまった。
ちゃんちゃん。

(つづく)


XPath搭載されてないブラウザでXPathを使えるようにする実装を作ったamachangってやっぱすげいな。

※ execTargetというNSDictionaryを渡しておいて↓のような処理を行うのはどうか。

  if([execTarget objectForKey:[NSString pathWithConponents:pathArray]] != nil){
    [self.delegate performSelector:@selector(tagProcess:) withObject:element];
  }