XPath で<li><b>hoge</b>ぼえ</li>で、「ぼえ」だけを取り出す方法

アマゾンの発売日前レビューってのがあまり好きじゃないんですよね。
発売日前のレビューは非表示にできるようにgreasemonkey(初体験)を書いてみようと思い、
とりあえずお知り合いのここを参照して調べる。

まずはアドオンでXpathCheckerをインストール。
ここでXPathつかったのはアマゾンのhtmlがひどかったから。web1.0っていうの?アレ。
<font size=”-2″>とか懐かしくて涙出てきた。

発売日を取得しようとしたんだけど、アマゾンでは発売日付近のhtmlは以下のようになってる。

<ul>
<li><b>なんか:</b>ああああ</li>
<li><b>なんか:</b>いいいい</li>
<li><b>発売日:</b>YYYY-mm-dd</li>
<li><b>なんか:</b>うううう</li>
</ul>

こんなかんじ。発売日の順番が商品によって違うので、
Xpathは
/html/body/table[1]/tbody/tr/td/div/ul[1]/li
でリストを配列で取得して走査。

ただこの状態だと
<b>発売日:</b>YYYY-mm-dd を取ってきてしまう。

YYYY-mm-dd部分のだけ取る方法ねーかなー正規表現で抜くかなーと悩んでたら
こんな感じでとれるよーとotchyさんに教えてもらた。

/html/body/table[1]/tbody/tr/td/div/ul[1]/li/child::node()[2]

child::node()はnode()でもおk

lists = $a(“/html/body/table[1]/tbody/tr/td/div/ul[1]/li/node()[2]“);
for(var i in lists){
var t = Date.parse(lists[i].nodeValue);
if(!isNaN(t)){
releaseDate = t;
}
}


node()[1]で前の部分が取れる。
最初テキストinnerHTMLで取ろうとしたら取れなかった…。(おそらくXMLだから?よくわからんけど。)
nodeNameをみたら#textだったのでnodeValueにしたら取れた。
$a はここの使ってる

なるほどねー。XPath初めて使ったけどコレは便利。
今回は習作として、今後ちょっといろいろ作ってみようと思った次第でした。

  1. コメントはまだありません。

  1. トラックバックはまだありません。