PxXMLDomParserは、XHTMLなどのXMLファイルをDOM解析し、特定の部分を抜き出したり、書き換えたりするためのPHPクラスライブラリです。
他のクラスに依存することなく単体で動作します。オリジナルのクラス名は PxXMLDomParser となっていますが、環境に合わせて任意に変更しても動作します。ただし、コンストラクタの関数名も同名にしてください。
目次
ダウンロード
次のボタンをクリックして、PxXMLDomParser をダウンロードしてください。
ファイル構成
- PxXMLDomParser.php
- PxXMLDomParserライブラリの本体です。
- docs/readme.txt
- お読みくださいテキストです。
インストール
PHPのお使いの環境の任意の場所に設置してください。PHP4系でも動作するように設計されています。
ただし、mbstring が有効である必要があります。
更新履歴
PxXMLDomParser 1.0.2 (2010/09/08)
- 属性がない要素をreplace()した時にforeach構文でエラーが起こる不具合を修正。
PxXMLDomParser 1.0.1 (2010/08/15)
- PHP5系で、大きなデータを扱うと正しく解析できないことがある不具合を修正。
- 設定を入出力するためのメソッド config() を追加。
- 設定項目 tags_case_sensitive を追加。タグの大文字小文字を区別するかどうか。デフォルトを「区別する」にした。
- 設定項目 atts_case_sensitive を追加。属性の大文字小文字を区別するかどうか。デフォルトを「区別する」にした。
PxXMLDomParser 1.0.0 (2010/01/13)
- 初版リリース
使い方
基本的な使い方
<?php
require_once( './PxXMLDomParser.php' );
$bin = file_get_contents( './sample.xml' );
$obj = new PxXMLDomParser( $bin , 'bin' );
$found = $obj->find( 'element' );
var_dump( $found );
?>
コンストラクタの第1引数に解析する対象 $bin を、第2引数に解析対象の種類 $input_type を指示します。
$input_type には次の何れかを受け付けます。
- bin
- XMLソース
- path
- XMLのパス(またはURL)
path が指定された場合には、PHPの file_get_contents() 関数によってソースを開きます。
省略した場合、与えられた $bin によって自動的に選択されます。
設定する
config()メソッドを通じて、パーサーの動作を設定できます。設定は、オブジェクトをインスタンス化した直後に行います。
<?php
require_once( './PxXMLDomParser.php' );
$bin = file_get_contents( './sample.xml' );
$obj = new PxXMLDomParser( $bin , 'bin' );
$obj->config('tags_case_sensitive',true);
$found = $obj->find( 'element' );
var_dump( $found );
?>
設定できる項目は下記の通りです。
| 設定項目 | 型 | 説明 |
|---|---|---|
| tags_case_sensitive | bool | タグの大文字小文字を区別するかどうか。デフォルトは true (区別する)。 |
| atts_case_sensitive | bool | 属性の大文字小文字を区別するかどうか。デフォルトは true (区別する)。 |
要素を検索する
find( $selector ) を使用します。
<?php
require_once( './PxXMLDomParser.php' );
$obj = new PxXMLDomParser( './sample.xml' , 'path' );
$found = $obj->find( 'element' );
var_dump( $found );
?>
この例では、全ての<element>タグを検索しています。返される値 $found は、検索された全ての結果を含む配列です。
得られたそれぞれの要素は、次の値を持つ連想配列となります。
- innerHTML
- 対象要素の内容
- outerHTML
- 対象要素の内容(対象タグ自体を含む)
- attributes
- 対象要素の属性(連想配列)
find() の第1引数 $selector には、CSSのセレクタと同様の形式で対象の要素を指定します。(ただし、一部の機能のみ対応しています)
* クラス指定
$found = $obj->find( '.classname' );
* ID指定
$found = $obj->find( '#classname' );
* 属性指定
$found = $obj->find( 'element[att=value]' );
* 子孫指定
$found = $obj->find( 'elm1 elm2 elm3' );
* 子供指定
$found = $obj->find( 'elm1 > elm2 > elm3' );
要素を書き換える
要素を書き換えるには、メソッド replace( $callback ) を使用します。
* グローバル関数を指定する場合
<?php
function callback( $dom , $num ){
$dom['outerHTML'] = '<div>置き換えました</div>';
return $dom['outerHTML'];
}
require_once( './PxXMLDomParser.php' );
$obj = new PxXMLDomParser( './sample.xml' , 'path' );
$obj->select( 'element' );
$obj->replace( 'callback' );
$final_bin = $obj->get_src();
?>
* スタティッククラスのメソッドを指定する場合
<?php
class hoge{
function callback( $dom , $num ){
$dom['outerHTML'] = '<div>置き換えました</div>';
return $dom['outerHTML'];
}
}
require_once( './PxXMLDomParser.php' );
$obj = new PxXMLDomParser( './sample.xml' , 'path' );
$obj->select( 'element' );
$obj->replace( array( 'hoge' , 'callback' ) );
$final_bin = $obj->get_src();
?>
* オブジェクトのメソッドを指定する場合
<?php
class hoge{
function callback( $dom , $num ){
$dom['outerHTML'] = '<div>置き換えました</div>';
return $dom['outerHTML'];
}
}
require_once( './PxXMLDomParser.php' );
$obj = new PxXMLDomParser( './sample.xml' , 'path' );
$obj->select( 'element' );
$callback_obj = new hoge();
$obj->replace( array( $callback_obj , 'callback' ) );
$final_bin = $obj->get_src();
?>
* 匿名関数を指定する場合
<?php
$callback = create_function(
'$dom , $num' ,
'$dom[\'outerHTML\'] = \'<div>置き換えました</div>\'; return $dom[\'outerHTML\'];'
);
require_once( './PxXMLDomParser.php' );
$obj = new PxXMLDomParser( './sample.xml' , 'path' );
$obj->select( 'element' );
$obj->replace( $callback );
$final_bin = $obj->get_src();
?>
著作権と利用についての規約
- PxXMLDomParser の著作権は、Tomoya Koyanagi に帰属します。
- 商用利用、個人利用を問わず自由に利用できます。
- ただし、これらのソースコードやアプリケーションに起因するいかなる損害やトラブルに関しても、著作者は責任を負うことはできませんので、利用者の自己責任の範囲でご利用ください。