snj14師曰く、「この世界はXPathにあふれておる。みてみよ、あの街を、あの風景を」 (twitxr.com の LDRize 対応のチャレンジ3)

taizooo こうなるとldrize対応もしたくなってくるわけです。 *
taizooo エー、どなたかldrize ideみたいなのごぞんじでありませんか〜 autopagerize ideみたいなの! *
ku @taizooo http://d.hatena.ne.jp/shinichitomita/20071111/1194764343 そのものずばりがあるけどLDRizeのsiteinfoを書く目的で使ったことはないです *
taizooo @ku ガンバッテミル。 *
taizooo XPath ってさぁー、そもそもどういうものなのかわかってないからねぇー。 *
taizooo うごきゃーいいんだよ。動けば。 *
taizooo そういえばなんか忘れているような。 *
taizooo twitxrのldrize対応だった。忘れてた… *
taizooo えるでぃらいずたいおうざせつぎみ。ねる。えくすぱすすいみんがくしゅうきぼう(ぼうよみ) *
snj14 カレーライス食べた *
taizooo twitxr.com のldrizeたいおしてみたけど、なんでうごいているのかわからん、からほんとはsiteinfoにあげたらまずいかとおもたけど、やてもうた。まずければだれかなおしてほしいですわ。えくすぱすがわかんないとちょとむずかしいとおもいますた。(ぼうよみ) *
snj14 .@taizoooの書いたXPathを勝手に添削でもしようかな.//はHTMLツリーの全部から探すって意味.div[@id="frontpage"]はid("frontpage")でOK.両方とも<div id="frontpage"></div>にマッチする. *
snj14 firebugスクリーンショットがあったほうが説明が楽かもしれん. *
snj14 tumblrは画像が縮小される.twixrだと画像が縮小されない. *
snj14 s/twixr/twitxr/ *
snj14 よし. http://twitxr.com/image/14159/ j/kで移動する先は「目的のノード」で指した場所にしたいとする.これは自分で「どこがいいかなー」って考える.この場合は親の<div id="div_updaet_14154 ...>のところでも,多分大丈夫. *
snj14 目的のノードは全てdiv要素でclass="update"っていう共通点がある.なので,とりあえず$x('//div[@class="update"]')をfirebugで実行する.先頭の//は「全部から探す」.先頭以外で出てきたら「子孫から探す」. *
snj14 firebugで実行したら,結果が3つしか出てこないので,これでおしまい.paragraphは//div[@class="update"].いっぱい出てきた時は誤爆してるので,親を指定して他所の<div class="update">にマッチしないようにする. *
ku snj14先生のXPath writing講座だ *
snj14 もし誤爆したら,親のノードを条件に含めて$x('//id("divTipBody")/div[@class="update"]')にする.idは重複したら駄目な属性なので,普通は誤爆しないんだけど,親にidがないときは親の親<div id="frontpage">を条件にいれる. *
snj14 $x('//div[@id="frontpage"]//div[@class="update"]')な感じにすると,<div id="frontpage">の子孫で,かつ<div class="update">のものにマッチすることになるから,誤爆する可能性が高くなる. *
snj14 もし,footer(スクリーンショットの下の方)の中に<div class="update">が混じってれば誤爆するし,目的のノードの子孫に<div class="update">が混じってても誤爆する. *
snj14 目的のノードには,<div id="div_update_14154"> , <div id="div_update_14150">って感じで,idの途中までが一緒という共通点もある. *
snj14 この共通点に着目してXPathを書く場合は,$x('//div[starts-with(@id,"div_update_")]/div') というふうに書ける.これでも,あのページではさっきと同じ結果が得られる. *
snj14 今のXPathの意味は「id属性がdiv_update_で始まるノードの子ノードでdiv要素のものをさがしてくれ」ってことになる. *
snj14 starts-with以外にも関数はある.SITEINFOのwikiにいっぱいサンプルがあるので参考にしつつ,googleで"XPath starts-with contains"とかで検索すると,関数を羅列したページが見つかる. *
snj14 偶数だけマッチや奇数だけマッチとか( http://twitter.com/snj14/statuses/598852462 ),「このノードの子で,かつ,あのノードより前に出てくるノード全部の中からdiv要素のもの」とかいう指定もできるし,確かそんなXPathを昔書いた. *
snj14 書くの忘れてたけど,さっきのスクリーンショットhttp://twitxr.com/snj14/with_friends/ のHTML. *
snj14 div[@class="update"]はclass属性をJavaScriptで変えられた時にバグるので,div[contains(@class,"update")]にする. *
snj14 div[contains(@class,"update")]だと,<div class="not_update">みたいなクラスにもマッチしてしまうので,div[contains(concat(" ",@class," ")," update ")]にする. *
snj14 でも,XPathを探してる最中にclass属性を変えられたりすることはほとんどないので,firebugで試してるときはdiv[@class="update"]でためして,後でちょこちょこっと書きかえればおーけー. *
snj14 このくらいかな.自分で書くなら'//div[starts-with(@id,"div_update_")]'かな.短いし. *
snj14 しかし,twitxrは毎回location書けってウルサイ. *
snj14 AMPMおやつクラブ バーベキュースナック100円がうまい・・・量も多く感じる. *
snj14 さっきまでXPathがどーたらこーたら書いてたのに,もう別のことを書こうって思える,この,自由な感じは,タイムラインがさっさか流れないと出てこないよねぇ. *
snj14 「たくさんのアウトプットを出す」ことを重要視するならば,この自由さはやっぱり必要不可欠だろーなー. *
os0x 今更だけど、@snj14 さんのXPath講座面白かった。 ただ、footerに誤爆するってのが http://twitter.com/snj14/statuses/770896758 気になった。footerは兄弟要素だからそこには誤爆しないはず *
snj14 @os0x 確かにー・・・!余計なところにも誤爆する例を挙げたくて>< *
snj14 訂正: http://tinyurl.com/yty66c は,$x('//div[@id="frontpage"]//div[@class="update"]')では誤爆しません.$x('//div[@class="update"]')だけだと誤爆するかもしれません. *