DOMと並んでXML文書を扱う仕様として出てくるのが、
SAX(Simple API for XML)です。
SAXは、XML文書を先頭から読み込んで、そこに出てくる要素や
テキストに応じて処理をします。
SAXでは、XML文章v風の要素の開始・終了、テキストの出現したときに、
ハンドラ(handler)と呼ばれるしくみに
通知を行います。ハンドラに関数を登録しておくと、文書の各部分が
現れたときにその関数が呼ばれるようになっています。
どの名前のメソッドが呼ばれるかは、SAXの使用で決まっています。
このため、ハンドラに登録する関数を書いておくことで、
各部分に応じた処理をするコードを作成できます。
実際にコードを見た方が早いです。
サンプルコードの実行結果はこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
<!doctype html> <html> <head> <meta charset="utf-8"> <title>SAXでXML文書を読み込んでみる</title> <link rel="stylesheet" href="../style.css"> </head> <body> <?php /* パーサーとは、プログラム、ソースコード、XML文書など 一定のルールに従い書かれたテキスト文書を解析して プログラム上で扱えるデータ構造の集まりに変換することです。 */ /* XML文書を解析するためのパーサーを作成 */ $prs = xml_parser_create("UTF-8"); /* xml_set_element_handler() 第1引数:パーサーを指定 第2引数:要素の開始のハンドラ 呼びたい関数名を指定 第3引数:要素の終了のハンドラ 呼びたい関数名を指定 */ xml_set_element_handler($prs , "startElement", "endElement"); /* xml_set_character_data_handler() 第1引数:パーサーを指定 第2引数:文字を読み込んだ時に 呼び第関数名を指定 */ xml_set_character_data_handler($prs, "characterData"); //XMLファイルを開く $fp = fopen("test.xml","r"); while( $data = fgets($fp,10000) ){ /* xml_parse()で文書の解析を実施 このとき、文書中に要素の 開始・終了・テキストが登場するたびに 登録されたハンドラ(関数)が実行される。 */ xml_parse($prs,$data,feof($fp)); } //SAXパーサーを解放 xml_parser_free($prs); function startElement($prs,$name,$attribute){ echo $name . "<br>"; } function endElement($prs,$name){ echo $name . "<br>"; } function characterData($prs,$data){ echo $data . "<br>"; } ?> </body> </html> |
関数名 | 戻り値 | 説明 |
---|---|---|
xml_parser_create() | resource | SAXパーサーを作成 |
xml_set_elemment_handler(resource $prs,callback $shdlr,callback $endlr) | boolean | 要素の開始ハンドラ・ 終了ハンドラを設定する |
xml_set_character_data_handler(resource $prs,callback $shdlr,callback $hdlr) | boolean | 文字の処理を解析 |
xml_parse(resource $prs,string $data) | integer | XML文書を解析 |
xml_parser_free(resource $prs) | boolean | SAXパーサーを解放 |