忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/04/24 10:02 |
ZF1.11 Zend_Dom_Query
Zend_Dom_Queryは、HTMLファイルにDOM形式でアクセスできるようになるよ、というクラスです。

これまでもSimpleXMLとかTidyとか使っていましたが、これらと違う最大の特徴が、「CSSパスでもXpathでもアクセスできる」という点です。

セレクタとしてはjQueryレベルの簡単最強な使い勝手を誇ります。

例としてこちらのページをパースしてみます。
http://framework.zend.com/manual/ja/manual.html
<?php
	
	//クラス
		require_once('Zend/Dom/Query.php');
		$domQuery = new Zend_Dom_Query();
	
	//パース
		$text = file_get_contents('http://framework.zend.com/manual/ja/manual.html');
		$domQuery->setDocument($text, 'UTF-8');
		
	//CSSパスを指定
		$domResult = $domQuery->query('body div[id="page"] div#main-holder div.content [class*="content"] div #manual div.info ul>li[3] ul>li');
		
	//中身を順に処理
		foreach($domResult as $key=>$domElement){
			//DOMElementが入ってくる
			print($domElement->nodeValue . " : " . $domElement->firstChild->getAttribute('href') . '<br />');
		}

	//CSSパス→XPathに変換できる
		print($domResult->getXpathQuery());
この長いCSSパス指定で、「Zend Framework リファレンス」の各Zend Frameworkのリストを指定しています。
結果、Zend_AclからZendX_JQueryまでをリストアップすることができます。

なお、CSSパス「body div[id="page"] div#main-holder div.content [class*="content"] div #manual div.info ul>li[3] ul>li」をXPathに変換した結果はこんなことになります。

//body//div[@id='page']//div[@id='main-holder']//div[contains(concat(' ', normalize-space(@class), ' '), ' content ')]//*[contains(@class, 'content')]//div//*[@id='manual']//div[contains(concat(' ', normalize-space(@class), ' '), ' info ')]//ul/li[3]//ul/li|//body//div[@id='page']//div[@id='main-holder']//div[contains(concat(' ', normalize-space(@class), ' '), ' content ')][contains(@class, 'content')]//div//*[@id='manual']//div[contains(concat(' ', normalize-space(@class), ' '), ' info ')]//ul/li[3]//ul/li

なんだこりゃ。
道理で誰もXPath使わないわけだ。

 
PR


2012/01/13 21:49 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<Minecraft1.0 PowerCraft 1.5A その8 論理回路3 | HOME | Minecraft1.0 Plastic Craft2.3 その5 電子レンジを作る>>
忍者ブログ[PR]