[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 メーリングリストの案内