Sax тормозит

Korner

Новичок
Sax тормозит

граждане
помогите плиз.
вот скрипт
PHP:
<?
$file = "data/data.xml";

$offer = Array();

function startElement($parser, $name, $attrs) 
{
	global $offer, $offer_id, $type, $oname, $url, $desc, $price;
	switch( $name ) {
		case 'OFFER':
			$offer['id'] = $attrs['ID'];
			$offer['brandid'] = $attrs['BRANDID'];
			$offer['advid'] = $attrs['ADVID'];
			$offer['cat'] = $attrs['CAT'];
			$offer['src'] = $attrs['SRC'];
			$offer['w'] = $attrs['W'];
			$offer['h'] = $attrs['H'];
		break;
		case 'TYPE':
			$type = true;
		break;
		case 'NAME':
			$oname = true;
		break;
		case 'URL':
			$url = true;
		break;
		case 'DESC':
			$desc = true;
		break;
		case 'PRICE':
			$price = true;
		break;
	}
}

function endElement($parser, $name) 
{
	global $sql, $offer, $offer_id, $type, $oname, $url, $desc, $price;
	switch( $name ) {
		case 'OFFER':
			print_r( $offer );

			unset( $offer );
		break;
		case 'TYPE':
			$type = false;
		break;
		case 'NAME':
			$oname = false;
		break;
		case 'URL':
			$url = false;
		break;
		case 'DESC':
			$desc = false;
		break;
		case 'PRICE':
			$price = false;
		break;
	}

}

function characterData($parser, $data) 
{
	global $offer, $offer_id, $type, $oname, $url, $desc, $price;
	if( $type )
		$offer['type'] = $data;
	if( $oname )
		$offer['name'] = $data;
	if( $url )
		$offer['url'] =  $data;
	if( $desc )
		$offer['desc'] =$data ;
	if( $price )
		$offer['price'] = $data;


}

$xml_parser = xml_parser_create();

xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
   die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
   if (!xml_parse($xml_parser, $data, feof($fp))) {
       die(sprintf("XML error: %s at line %d",
                   xml_error_string(xml_get_error_code($xml_parser)),
                   xml_get_current_line_number($xml_parser)));
   }
}
xml_parser_free($xml_parser);
?>
вот data.xml
http://www.mixmarket.biz/mixml.plx?id=4294966938
почему при выводе print_r( $offer ); в endElement отображается только
а если вывести в characterData
выводится полностью
тоже самое desc обрезается
помогите плиз, уже не знаю как быть (l
 

Korner

Новичок
не помогает
да и xml там будет метров 50
считать все в одну переменную сразу не выйдет

-~{}~ 22.04.06 15:04:

ап
выручайте!
 

Korner

Новичок
шото я впервые про такое слышу и гугл ниче толкового не дает
можн ссылочку?

-~{}~ 22.04.06 23:41:

up :]

-~{}~ 23.04.06 18:37:

помогите!

-~{}~ 23.04.06 19:03:

вобщем проблему решил
characterData при обработке url и desc запускается несколько раз, поэтому если сделать $offer['url'] .= $data; вместо $offer['url'] = $data; и очищать $offer['url'] при начале offer все получается
почему так происходит для меня загадка.
 

cDLEON

Онанист РНРСlub
Загадка вот в чём. Ты парсишь XML-ку кусками.
Получается <ASD>asdasdas
Во втором, допустим asdasd</ASD>
Удачный парсинг?
Тебе в любом случае нужен цельный ХМЛ. Либо цельные куски ХМЛ-а

-~{}~ 24.04.06 18:50:

ДА и метров 50-ят даже что бы считать, нужно много времени потратить.
 

Frol

Новичок
cDLEON
moxnatiy
хватит бредить.
дружно перечитываем ман про [m]xml_parse[/m]
 
Сверху