xpath

みんなの就職活動日記でAutoPagerizeを有効に

2009/09/01 21:50くらいに追記 早くも添削されてた。(?:bbs|\?action=bbs) -> (?:\?action=)?bbs bbsが重複してるから、?action= があってもなくても良しにすればスッキリ。なるほど id:os0x さんに助言をいただいたので早速修正。string-length(@class)=0 -…

PHPのXPathをトリッキーに使ってHTMLのテキストノードを取得

以前、PHPのXPathでテキストノード取得したら、期待した順番通りに取得できなかった。と書きました。 ある要素の子ノード群に、エレメントノードとテキストノードがそれぞれ2つ以上あると起きる現象ではないかと推測します。 直下じゃなければいいのでは? …

iframe内の要素をxpath4jquery使って取得

xpathでドキュメントをまたいだ検索ができないということで、contextのドキュメントでcreateExpression切り替えられないか?と考えました。 で、できたのが // xpath4jqueryの57行目辺り context = context || document; doc = (context.nodeName == '#docum…

iframe内の要素をXPath使って取得

前提条件として、ドメインは一緒。 昨日の失敗は、iframeのdocumentをcontextに指定したところで、document.createExpressionで評価するからdocument違いが起こっていたためです。そこで、importNodeメソッドですよ。 外部ドキュメントからノードのコピーを…

xpath4jquery.jsをjquery-1.3.jsで動かす

たまに、jQueryはXPathのセレクタ使えるというエントリーを見かけますが、CSSのセレクタの間違いです。 例えば、idがhogeの要素を取得する場合 #hoge が CSS id("hoge") が XPathで、XPathを使いたいなぁと思っていたところ、 id:amachangさんがJavascript-X…

ページをクロールする時に必要なAタグのみ取得するXPath

10/4 追記:メールも弾くよう改良 getElementsByTagName('a')で全部取ってくるくらいなら、XPathでフィルタリングしたい! ということで、 /html/body//a[not(contains(@href, "#")) and not(starts-with(@href, "javascript:")) and not(starts-with(@href,…

bodyとdiv直下のテキストノードをXPathで取得してspanで囲む方法

昨日の続きです。タイトルの通りです。 複数のクエリーは、パイプで繋げば一度に取れるらしいですよ。 $xpath = new DOMXpath($dom); $query1 = '/html/body/text()[string-length(normalize-space()) > 0]'; $query2 = '/html/body//div/text()[string-leng…

XPathで取ってきたテキストノードが意図した順番で来なかった

divの直下にテキストは好きじゃないけれど <html> <head> <meta http-equiv='Content-type' content='text/html; charset=utf-8'> <title>test</title> </head> <body> <div> <a href="hoge.php">hoge</a> | <a href="huga.cgi">huga</a> | </div></body></html>

改行を含まないテキストノードを取得するXPath

'//text()[string-length(normalize-space()) > 0]'これで勝つる。 <追記> 誰がタイトル取ってこいと...俺か、 欲しいのは、bodyタグ以下だけですよね〜 '/html/body//text()[string-length(normalize-space()) > 0]'今度こそ </追記> normalize-spaceで空白文字削…