[PHP-users 23512]xmlをparseするクラスを作りたい
ura
ura @ xmail.plala.or.jp
2004年 10月 29日 (金) 01:26:04 JST
独学勉強中のうらと申します。
XMLのParseクラスを作ろうとしているのですがxml_parse のハンドラ関数の呼び出しが上手くいきません。
どなたかお知恵をお貸し頂けないでしょうか。
こちらの↓の記事を参考にしてclassにせずベタに書いたものは正常に動きます。
http://forum.nifty.com/fhpg/column/prog/20040208a.htm
そこからコンストラクタにパスを与えるとXMLのエレメントを保持するクラスを作ろうとして悩んでいます。
中核部分のみ書き出したソースを下に記します。
ハンドラ関数は元々"startElement"などでしたが、そのままでは実行したときの表示が
Warning xml_parse(): Unable to call handler startElement() in c:\〜
と、なっていました。
xml_parser_set_option と xml_set_element_handler で指定する3つのハンドラ関数を指定すると今度は
Warning xml_parse(): Unable to call handler () in c:\〜
と、いう具合に () というハンドラ関数が呼ばれようとします。
他にまだ何か指定するハンドラ関数があるのでしょうか?
それともclassにする事が無理なのでしょうか。
作業環境
WinXP SP2
PHP4.3.9
Apache1.3.31
宜しくお願いします。
******************************************
<?php
class XML_Parser {
//初期化
var $fileRss = "../rdf.xml";
var $xml_parser;
/**
* コンストラクタ
* 引数で渡されたXMLへのパスをセット
*/
function XML_Parser($xml_path) {
$this->fileRss = $xml_path;
//初期化及び読み込み
$this->parse();
}
/**
* 初期処理
* 変数初期化及びXMLパーサ生成
* XMLの読み込み
*/
function parse() {
//XMLパーサを作成
$this->xml_parser = xml_parser_create();
//大文字変換を行わない
xml_parser_set_option($this->xml_parser, XML_OPTION_CASE_FOLDING, false);
//Start およびEndのエレメントを指定する
xml_set_element_handler($this->xml_parser, "$this->startElement", "$this->endElement");
//文字データハンドラを設定する
xml_set_character_data_handler($this->xml_parser, "$this->characters");
//ファイルのオープン処理
if (!($fp = fopen($this->fileRss, 'r'))) {
die("RSSが開けません!");
}
//オープンしたファイルを 読み込み解析
while ($fileRssdat = fread($fp, 8192)) {
if (!xml_parse($this->xml_parser, $fileRssdat, feof($fp))) {
return "XML PARSE ERROR";
}
}
//ファイルのクローズ処理
fclose($fp);
//作成したXMLパーサを解放する
xml_parser_free($this->xml_parser);
}
//テキストノードの値
function characters($parser, $text) {
// 処理省略
}
//要素の開始
function startElement($parser, $name, $attrib) {
// 処理省略
}
//要素の終了
function endElement($parser, $name) {
// 処理省略
}
}
?>
__
ura
ura @ xmail.plala.or.jp
PHP-users メーリングリストの案内