Newsgroup: it.comp.www.php
Titolo: xml to php ...lungo

Dopo una giornata di prove, letture, fra domxml etc...
e decine di registrazioni in tutti i siti mondiali e
dopo avermi letto tutto cio' che ho trovato su php net...
ebbene ho piů dubbi di prima :(
Debbo fare un sito dove i moduli sono controllati dall' amministratore
siccome sono tanti e ne vengono aggiunti sempre altri, prima avevo
pensato di mettere le informazioni tutto sul database, il database
deve svolgere un lavoro non da poco, dopo un primo abbozzo
supero gia le venti tabelle, e di conseguenza non č nemmeno estensibile,
dopo lunghe discussioni, abbiamo pensato di creare una pagina
d' amministrazione che genera un' xml.
Creare il dato xml č stato abbastanza semplice, anche senza usare
il supporto xml di php, il quale mi sembra un po' complicato da gestire,
cosě ho buttato giů in paio di classi ed ho risolto.
Conclusione:
Ho perso un casino di tempo a cercare a provare, e alla fine ho usato
ho risolto con poche righe di codice, naturalmente riesco a leggere
solo il documento xml che ho fatto io.
Naturalmente sono restato con l' amaro in bocca, non potendo sfruttare
le funzione relative in php, sicuramente il problema non dipende dalle tali,
ovviamente mi č sfuggito qualcosa, o non ho travato cio' che volevo.
Chiedevo a voi se conoscete qualche tutorial concreto, non phpnet
che spiega con precisione come leggere un xml da php ?
Esempio il mio file č strutturato in questo modo?
==================================
<var1 link="home">
<dir>inc</dir><filename>cerca.php</filename><title>Cerca</title>
<dir>etc</dir><filename>last_ins.php</filename><title>Lista</title>
</var1>
<var2 link="login">
<dir>inc</dir><filename>login.php</filename><title>Login</title>
</var2>
===============================================
function set_module($get_or_post_array){
//qui vorrei usare le funzioni xml integrate di php
//pechč se uso delle regex, o cio' che sia, temo
//non sia cosě performante come le originali
      return array($I_file_da_includere, $titolo);
}

 </var2>
Tanto per cominciare il codice di cui sopra non e' un documento XML
correttamente formattato (DEVE avere un solo nodo radice),
secondariamente non mi sembra un approccio XML qullo di usare due nomi
di tag differenti per lo stesso "tipo" di nodo (nello specifico var1 e
var 2), segue del codice XML piu' XML oriented:
<?xml version="1.0" encoding="iso-8859-1"?>
<vars>
    <var id="1" link="home"> 
      <dir>inc</dir>
      <filename>cerca.php</filename>
      <title>Cerca</title>
      <dir>etc</dir>
      <filename>last_ins.php</filename>
      <title>Lista</title>
    </var>
    <var id="2" link="login"> 
      <dir>inc</dir>
      <filename>login.php</filename>
      <title>Login</title>
    </var>
</vars>  
Infine non capisco il concetto di <dir /> presente in /vars/var[@id=1]
dove sono presenti due nodi dir, due nodi filename e due nodi title. A
che cosa si riferiscono? Forse il codice e' meglio cosi:
<?xml version="1.0" encoding="iso-8859-1"?>
  <vars> 
    <var id="1" link="home"> 
      <dir>/</dir>
      <filename>home.php</filename>
      <title>Home</title>
      <links> 
        <link> 
          <dir>inc</dir>
          <filename>cerca.php</filename>
          <title>Cerca</title>
        </link>
        <link> 
          <dir>etc</dir>
          <filename>last_ins.php</filename>
          <title>Lista</title>
        </link>
      </links>
    </var>
    <var id="2" link="login"> 
      <dir>inc</dir>
      <filename>login.php</filename>
      <title>Login</title>
      <links />
    </var>
  </vars>
Ora, vista la tua difficolta' nello strutturare l'XML, il problema non
e' tanto quello di utilizzare PHP per leggere XML, ma di studiarti
l'XML.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/1
Inviare email con allegati? 
http://url.repository.biz/go/1Z
Cerchi un programmatore PHP/MySQL? 
http://url.repository.biz/go/1Y
L'uomo, conscio di sbagliare, persevera.

 l'XML.
Bella e completa la risposta di Setec.
Per imparare XML ti consiglio: 
http://www.iei.pi.cnr.it/~Martinelli/
Per PHP e XML: 
http://phpxml.ijk.it/
Ciao,
 Bondo


Ciao,
le RegExp sono di gran lunga più veloci dei parser xml di
PHP in lettura, ovviamente non hanno la stessa flessibilità nè le stesse
capacità di manipolazione
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 l'XML.
Il mio codice è giusto, l' esempio postato in precedenza rappresenta solo
due
Child, per maggiore comodità ho modificato l' xml in questo modo
<var1 link="home">
<center dir="etc/html/opt" filename="infos.php" title="Informazioni"/>
<center dir="etc/html/opt" filename="user.php" title="Utenti registrati"/>
</var1>
<var1>
E' il valore del  $_GET['var1'], il quale potrebbe essere anche
$_POST['pippo']
se $_GET['var1']  risultasse vero, la mia funzione
legge tutto cio' che su trova all' interno del nodo var1.
i questo caso
mi prende due tabelle nella directory "etc/html/opt/" una con il nome
infos.php e l'altra user.php e gi assegna i rispettivi titoli.

 modo
Premettendo che resto comunque scettico sul tuo approccio all'XML segue
una possibile soluzione:
<?php 
$_GET["var1"] = "something"; // test
ob_start (); 
?>
<var1 link="home">
<center dir="etc/html/opt" filename="infos.php" title="Informazioni"/>
<center dir="etc/html/opt" filename="user.php" title="Utenti
registrati"/>
</var1>
<?php 
$XML = ob_get_contents ();
ob_end_clean ();
if (!$dom = domxml_open_mem ($XML)) { 
 echo "Error while parsing the document\n"; 
 exit; 
} 
if (isset ($_GET["var1"]))
{
	$root = $dom->document_element(); 
 
	$xmldoc = domxml_open_mem($XML);
 
	$var1 = $xmldoc->get_elements_by_tagname ("var1");
	$centers = $var1[0]->get_elements_by_tagname ("center");
	foreach ($centers as $center)
	{
		print ("Prendi " . $center->get_attribute ("filename") . " nella
directory " . $center->get_attribute ("dir") . " ed assegnagli il
titolo " . $center->get_attribute ("title") . "<br />");
	}
}
?>
Ora, il codice di cui sopra funziona, non e' molto elegante ma
funziona. Manca qualsivoglia controllo sull'esistenza dei nodi o
gestione di eventuali errori.
Segue un XML che potrebbe meglio sostituire quello da te proposto:
<?xml version="1.0" encoding="iso-8859-1"?>
<vars>
  <var type="1" link="home"> 
    <module position="center" dir="etc/html/opt" filename="infos.php"
title="Informazioni"/>
    <module position="center" dir="etc/html/opt" filename="user.php"
title="Utenti registrati"/>
  </var>
  <var type="2" link="login"> 
    <module position="left" dir="etc/html/opt" filename="login.php"
title="Login"/>
    <module position="center" dir="etc/html/opt" filename="user.php"
title="Utenti registrati"/>
  </var>
  <var type="3" link="contatti"> 
    <module position="right" dir="etc/html/opt" filename="contatti.php"
title="Contatti"/>
    <module position="center" dir="etc/html/opt" filename="user.php"
title="Utenti registrati"/>
  </var>
</vars>
Questo XML permette di utilizzare le stesse funzioni per selezionare il
modulo senza dover scriverne una per ogni modulo (se passo var1, se
passo var, se passo var3 etc.). Nel caso specifico invece di ricercare
/var1 verra' cercato tramite  XPath il nodo var di tipo 1
(/vars/var[@type=1]) oppure, se risultasse piu' semplice da mantenere
si potrebbe anche cercare il nodo var con link chiamato home
(/vars/var[@link='home']). Inoltre l'aggiunta dell'attributo position
permette di scrivere un unico sistema per definire dove posizionare il
modulo piuttosto che scriverne uno per ogni possibile posizionamento.
