2012年11月11日日曜日

XPathで複数のクラス名が付いている要素取得時の注意点

参考:
http://d.hatena.ne.jp/ksmemo/20090815/p1
http://feed.designlinkdatabase.net/feed/outsite_102424.aspx

<div class="aaa bbb ccc"></div>

このような要素は

//div[@class='aaa']

では取得できず、空白を含めてクラス名をそのまま指定しなくてはいけない

//div[@class='aaa bbb ccc']

ひとつだけ指定してやる場合は

//div[contains(concat(" ",@class," "), " aaa ")]

のようにします。(前後の空白は必要みたい)

さらにクラス名はスペースや改行も含めていいという仕様なので
normalize-space()を使って余計なスペースを除去したほうが良いようです。

//div[contains(concat(" ", normalize-space(@class), " "), " aaa ")]

 normalize-spaceは前後のスペースを削除し、連続したスペースをひとつのスペースにしてくれます。