Newsgroup: it.comp.www.php
Titolo: parse XML con php e mysql

Salve a tutti
ho il seguente file XML complesso che dovrei leggere tramite php ed
inserire i dati , non tutti ma solo quelli specifici , all'interno di
un db mysql
la struttura del file XML è la seguente :
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<parlast modified="20/06/2008 12:03">
	<nodo name="test" nodoid="3893">
		<group name="test2 groupid="12322">
			<event name="test3" eventid="6939592" closetime="21/06/2008 02:15">
				<dettagli name="PRIMO DETTAGLIO" dettagliid="6939592" etid="10">
					<ok="1xxxxxxxx" id="34494265" prezzo="1.70" status="Open"/>
					<ok="2xxxxxxxx" id="34494266" prezzo="3.30" status="Open"/>
					<ok="3xxxxxxxx" id="34494267" prezzo="4.50" status="Open"/>
				</dettagli>
				<dettagli name="SECONDO DETTAGLIO" dettagliid="6939595"
etid="120">
					<ok="4xxxxxxxx" id="34494274" prezzo="2.20" status="Open"/>
					<ok="5xxxxxxxx" id="34494275" prezzo="2.15" status="Open"/>
					<ok="6xxxxxxxx" id="34494276" prezzo="4.50" status="Open"/>
				</dettagli>
			</event>
		</group>
	</nodo>
</parlast>
Ho utilizzato diverse classi e funzioni ( esempio simple xml per
leggere XML e trasformarlo in array ) ma non non riuscito nel mio
intento..
Qualcuno di voi ha gia affrontato questo tipo di problema?
####################################################################
codice utilizzato per il parse XML
<?php
class Parser {
  var $struct = array();  // holds final structure
  var $curptr;  // current branch on $struct
  var $parents = array();  // parent branches of current branch
  function Parser($url) {
    $this->curptr =& $this->struct;  // set ref to base
    $xmlparser = xml_parser_create();
    xml_set_object($xmlparser, $this);
    xml_set_element_handler($xmlparser, 'tag_open', 'tag_close');
    xml_set_character_data_handler($xmlparser, 'cdata');
    $fp = fopen($url, 'r');
    while ($data = fread($fp, 4096))
      xml_parse($xmlparser, $data, feof($fp))
      || die(sprintf("XML error: %s at line %d",
         xml_error_string(xml_get_error_code($xmlparser)),
         xml_get_current_line_number($xmlparser)));
    fclose($fp);
    xml_parser_free($xmlparser);
  }
  function tag_open($parser, $tag, $attr) {
    $i = count($this->curptr['children']);
    $j = count($this->parents);
    $this->curptr['children'][$i]=array();  // add new child element
    $this->parents[$j] =& $this->curptr;  // store current position as
parent
    $this->curptr =& $this->curptr['children'][$i];  // submerge to
newly created child element
    $this->curptr['name'] = $tag;
    if (count($attr)>0) $this->curptr['attr'] = $attr;
  }
  function tag_close($parser, $tag) {
    $i = count($this->parents);
    if ($i>0) $this->curptr =& $this->parents[$i-1];  // return to
parent element
    unset($this->parents[$i-1]);  // clear from list of parents
  }
  function cdata($parser, $data) {
    $data = trim($data);
    if (!empty($data)) {
      $this->curptr['value'] .= $data;
    }
  }
}
$myparser = new Parser('xml.xml');
print_r($myparser->struct);
####################################################################
saluti

 class Parser extends Wheel {
:)
http://it.php.net/manual/en/ref.domxml.php
-- 
while(!asleep()) sheep++;

ok
ho realizzato il tutto attraverso DOM con il seguente script
<?
  $objDOM = new DOMDocument();
  $objDOM->load("xml.xml");
  $nodo = $objDOM->getElementsByTagName("nodo");
   foreach( $nodo as $value )
  {
    $groups = $value->getElementsByTagName("group");
    $group  = $groups->item(0)->nodeValue;
    $events = $value->getElementsByTagName("event");
    $event  = $events->item(0)->nodeValue;
    echo "$group - $event <br>";
  }
?>
ma sembra non funzionare correttamente con questo tipo di file XML ...
se invece utilizzo questo script con una struttura XML semplice tipo
<?xml version="1.0" encoding="ISO-8859-1"?>
<nodo>
<group>esempio 1</group>
<event>esempio 1 </event>
</note>
<note>
<group>esempio 2</group>
<event>esempio 2</event>
</nodo>
il tutto funziona correttamente..
qualcuno sa dirmi perchè ?