[PHP-users 23317]SAX処理で不具合
Hitoshi Kawano
kawano @ topics.or.jp
2004年 9月 16日 (木) 16:13:25 JST
河野と申します。
SAX処理でおかしなことが起こるので、同様の経験のあるかたが
おられたらお教え下さい。
test.xml
----------------------------------------
<?xml version="1.0" encoding="euc-jp"?>
<top>
<test>
<child1>子要素1文字列1</child1>
<child2>子要素2文字列1</child2>
</test>
<test>
<child1>子要素1文字列2</child1>
<child2>子要素2文字列2</child2>
</test>
</top>
xmlparse.php
----------------------------------------
<?php
function startElementHandler($parser, $name, $attribs){
if($name == "child1" || $name == "child2") {
echo ("$name:");
}
}
function endElementHandler($parser, $name){
global $tmp;
echo ("$tmp<br>\n");
}
function cdatahandler($paser, $data){
global $tmp;
$tmp = "";
$tmp = $data;
}
$parser = xml_parser_create();
xml_set_element_handler($parser, "startElementHandler",
"endElementHandler");
xml_set_character_data_handler($parser, "cdataHandler");
$file = "test.xml";
if(!($fp = fopen($file, "r"))){
die("error");
}
while($data = fread($fp, 4096)){
if(!xml_parse($parser, $data, feof($fp))){
die(sprintf("XML error %d %d",
xml_get_current_line_number($parser),
xml_get_current_column_number($parser)));
}
}
xml_parser_free($parser);
?>
以上のXML FILEとPHPプログラムを処理すると結果は、こうなると思うのですが、
child1:子要素1文字列1<br>
child2:子要素2文字列1<br>
child1:子要素1文字列2<br>
child2:子要素2文字列2<br>
こんな感じで、要素値がとれないときがあります。
child1:子要素1文<br>
child2:子要素2文字列1<br>
child1:子要素1文字<br>
child2:子要素2文字列2<br>
function cdatahandlerのなかで
if($elname == "child1") {
switch($idx) {
case 0:
$tmp_cl = $tmp; break;
case 1:
if($tmp != "" && $tmp != "\n") {
$tmp = $tmp_cl. $tmp;
}
break;
default: break;
}
$idx++;
} else {
$idx = 0;
}
こんなことをすると、とれます。しかし2バイトコードの値は
うまくとれません。
環境は、
RedHat Linux 8.0
apache 1.3.27
php 4.2.2
expat 1.95.7
です。
よろしくお願いします。
_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/☆彡
河野 仁(Hitoshi Kawano)
E-Mail:kawano @ topics.or.jp
_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/
PHP-users メーリングリストの案内