[Php-it] da XUL al resto del mondo (una disamina sugli alberi)

Andrea Franceschini therealmorpheu5 at gmail.com
Tue Apr 10 14:15:10 CEST 2007


Il 10/04/07, Cristiano Verondini<cverondini a deis.unibo.it> ha scritto:

>     Curioso. Controlla che la struttura su cui fai il traversal sia come te
> l'aspetti, poi comincia un po' di debug. Se vuoi postare un po' di codice

Con ordine. Lo spezzone di XML:

<ui>
	<groupbox>
		<grid flex="1">
			<columns>
				<column/>
				<column/>
			</columns>
			<rows>
				<row>
					<label value="Here we are"/>
					<textbox id="content"/>
				</row>
			</rows>
		</grid>
	</groupbox>
</ui>

verificato caricandolo in un SimpleXMLElement e facendone il print_r,
è esattamente quello che mi aspettavo. Il traversal (ricorsivo)
semplificato tanto per provarlo: dovrebbe replicare la struttura
originale solo privata di attributi e valori. loadVirtual è un metodo
che in pratica prende una stringa e ne fa un oggetto SimpleXMLElement.
$node che viene passato è un SimpleXMLElement, la chiamata avviene
passandogli il SimpleXMLElement relativo alla root del sottoalbero
contenente lo XUL.

private function recur_form($node) {
	$newnode = $this->core->obj_xml->loadVirtual('<'.$node->getName().'/>');
	foreach($node->children() as $child) {
		$newnode->addChild($child->getName(), $this->recur_form($child));
	}
	return $newnode;
}

Il debug l'ho fatto mettendo un print_r($newnode) un attimo prima del
return e il relativo output è

SimpleXMLElement Object
(
)
SimpleXMLElement Object
(
)
SimpleXMLElement Object
(
    [column] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [0] =>
                )

            [1] => SimpleXMLElement Object
                (
                    [0] =>
                )

        )

)
SimpleXMLElement Object
(
)
SimpleXMLElement Object
(
)
SimpleXMLElement Object
(
    [label] => SimpleXMLElement Object
        (
            [0] =>
        )

    [textbox] => SimpleXMLElement Object
        (
            [0] =>
        )

)
SimpleXMLElement Object
(
    [row] => SimpleXMLElement Object
        (
            [0] =>
        )

)
SimpleXMLElement Object
(
    [columns] => SimpleXMLElement Object
        (
            [0] =>
        )

    [rows] => SimpleXMLElement Object
        (
            [0] =>
        )

)
SimpleXMLElement Object
(
    [grid] => SimpleXMLElement Object
        (
            [0] =>
        )

)
SimpleXMLElement Object
(
    [groupbox] => SimpleXMLElement Object
        (
            [0] =>
        )

)

da cui l'XML finale è

<?xml version="1.0"?>
<ui><groupbox></groupbox></ui>

E questo è quanto. Sono abbastanza sicuro di non aver sbagliato il
traversal (ma è $tempo che non scrivo cose ricorsive quindi poesse che
mi sia scappato qualcosa). Comunque quel che mi fa pensare di non
averlo sbagliato e che, per alcune chiamate, i subtree sono corretti,
salvo essere potati al secondo livello.


More information about the Php-it mailing list