- Home
- Categorie
- Coding e Sistemistica
- Coding
- Aggiungere Nodo Xml
- 
							
							
							
							
							
Aggiungere Nodo XmlSalve ragazzi, ho provato a cercare, sarà uno dei tanti aiuti strachiesti, ma non riesco a capire come aggiungere un nodo ad un semplice xml. Ho provato in questo modo, dividendo i file .php, e richiamandoli all'occorrenza, ma la stringa viene scritta nell'xml in modo sbagliato, non tenendo conto del tag di chiusura dell'xml, non andando a capo, nonostante il "\n" finale. Mi aiutate a capire come ragionare? [PHP]include("stampa.php"); 
 $nome = paolo;
 $stringa= "<elemento nome="$nome"></elemento>\n";
 $stampa = stampa($stringa);
 [/PHP][PHP]<?php 
 function stampa($stringa){
 if (!$fileXml = fopen("app.000.xml","a")){
 echo "Non posso aprire il file";
 } else {
 fputs($fileXml,$stringa);
 fclose($fileXml);
 }
 }
 ?>[/PHP]
 
- 
							
							
							
							
							
Niente, non riesco. 
 Utilizzo php4 il Dom non mi va, e non posso avere il simpleXml.Io riesco a scrivere, ma non dove dico io! I nodi vengono aggiunti uno sotto l'altro, come deve essere, ma poi non capisco come scrivere il tag di chiusura dell'xml! [PHP]<?xml version="1.0" encoding="UTF-8"?> 
 <menu>
 <elemento nome="operatoriPhp.png" url="../archivio/operatoriPhp.png" peso="36.51 KB" tipo="png" data="03-07-10" ora="23:08"></elemento>
 <elemento nome="operatoriPhp.png" url="../archivio/operatoriPhp.png" peso="36.51 KB" tipo="png" data="03-07-10" ora="23:08"></elemento>[/PHP]Come aggiungo il tag di chiusura ? Sto odiando google!  Mi aiutate? Non so più cosa cercare. 
 
- 
							
							
							
							
							
Ok, ho attivato il php 5, vediamo se così riesco!  
 
- 
							
							
							
							
							
Con SimpleXML attivo, riesco a creare uno nuovo child ed aggiungere i vari attributi, il problema è che i vari child, vengono stampati di fila, creando una lunga riga, e non tante righe una sull'altra. Con questo codice: [PHP]<?php 
 $stringa= "<elemento nome="nome" url="cartella/nome" peso="peso" tipo="estensione" data="data" ora="ora"></elemento>\n";$xml = simplexml_load_file("simple.xml"); $nuovoElemento = $xml->addChild("elemento"); 
 $nuovoElemento->addAttribute("nome", "domenico.jpg");
 $nuovoElemento->addAttribute("url", "../archivio/domenico.jpg");
 $nuovoElemento->addAttribute("peso", "35.01 MB");
 $nuovoElemento->addAttribute("tipo", "jpg");
 $nuovoElemento->addAttribute("ora", "20.00");echo "<pre>".htmlentities($xml->asXML())."</pre>"; $f = fopen("simple.xml", "w"); 
 fwrite($f, $xml->asXML());
 fclose($f);?>[/PHP] Ottengo questo: [PHP]<?xml version="1.0"?> 
 <menu>
 <elemento peso="35.01 MB" tipo="jpg" ora="20.00"/><elemento nome="domenico.jpg" url="../archivio/domenico.jpg" peso="35.01 MB" tipo="jpg" ora="20.00"/><elemento nome="domenico.jpg" url="../archivio/domenico.jpg" peso="35.01 MB" tipo="jpg" ora="20.00"/><elemento nome="domenico.jpg" url="../archivio/domenico.jpg" peso="35.01 MB" tipo="jpg" ora="20.00"/></menu>[/PHP]Evidentemente sbagliato. 
 Ma non era più semplice passargli la variabile stringa, in questo caso inutilizzata, invece di fare tutto quel casino?Per quanto mi farete parlare da solo a tarda notte? Dai ragazzi aiutatemi! :bho: 
 
- 
							
							
							
							
							
Ciao, io ho usato questo per aggiungere automaticamente link a un sitemap, forse ti puo aiutare: 
 [PHP]function sitemap($link)
 {
 $sitemap_xml = 'sitemap.xml';
 $array_xml = file($sitemap_xml);
 $ultima_linie = array_pop($array_xml);
 $array_xml[] = '<url>'.PHP_EOL.'<loc>'.$link.'</loc>'.PHP_EOL.'</url>'.PHP_EOL;
 $array_xml[] = $ultima_linie;
 file_put_contents($sitemap_xml, implode($array_xml));
 }
 function sitemap_insert($data) {
 $sitemap = 'link';
 $sitemap = str_replace('%20', ' ', $sitemap);
 $sitemap = str_replace('&', '&', $sitemap);
 sitemap($sitemap);
 }[/PHP]
 Come puoi vedere invece di \n ho usato PHP_EOL
 
- 
							
							
							
							
							
Ciao, ti ringrazio, ma in questo modo annulli completamente il simpleXml, a me interessa saperlo usare. Aiuti? 
 
- 
							
							
							
							
							
niente??? 
 
- 
							
							
							
							
							
Con questo xml: [PHP]<root> 
 <elemento nome="foto1.png" url="../archivio/foto1.png"/>
 <elemento nome="foto2.png" url="../archivio/foto2.png"/>
 <elemento nome="foto3.png" url="../archivio/foto3.png"/>
 </root>[/PHP]E questo ciclo in php: [PHP]<?php $url="bad.xml"; 
 $xml = simplexml_load_file($url);foreach ($xml->children() as $child) { 
 echo $child["nome"]."<br>";
 echo $child["url"]."<br>";
 }?>[/PHP] Ottengo questo: [PHP]foto1.png 
 ../archivio/foto1.png
 foto2.png
 ../archivio/foto2.png
 foto3.png
 ../archivio/foto3.png [/PHP]Quindi riesco a leggere i vari attributi dei child, ma se volessi accedere direttamente ad uno di questi senza bisogno del ciclo, come dovrei fare? Chiaritemi le idee su come leggere e scrivere tramite simpleXml, non ci sto capendo nulla! :bho: 
 
- 
							
							
							
							
							
Penso che il modo giusto è questo. 
 w3schools.com/php/func_simplexml_children.asp
 Come l'hai fatto tu sopra, cosa ti cambia se la fai con cicli o senza?
 
- 
							
							
							
							
							
ti ringrazio boghy, se l'unico in tanti forum che si degna di rispondermi... cosa diavolo li aprono a fare i forum se poi non vengono seguiti.. bah.. dici che è quello il modo giusto? Mi sembra strano che non si possa accedere ad un singolo attributo direttamente.. non so più cosa cercare :-S nel frattempo è uscito un problema diverso.. 
 Questo codice mi da un errore, quando inserisco l'addChild in una funzione che passa una variabile (la stringa per l'xml), se lo tolgo dalla funzione e lo uso "sfuso" invece non crea problemi -.-[PHP]<?php $stringa = "prova stringa"; 
 $xml = simplexml_load_file("bad.xml");function prova($var){ 
 $nuovoElemento = $xml->addChild($var);$f = fopen("bad.xml", "w"); 
 fwrite($f, $xml->asXML());
 fclose($f);
 }prova($stringa); ?>[/PHP] [PHP]Fatal error: Call to a member function addChild() on a non-object in /web/htdocs/www .miosito.com/home/app/crea.php on line 7 [/PHP] 
 
- 
							
							
							
							
							
@boghy91 said: Penso che il modo giusto è questo. 
 w3schools.com/php/func_simplexml_children.asp
 Come l'hai fatto tu sopra, cosa ti cambia se la fai con cicli o senza?Primo problema risolto! Mi hanno detto che questo è il modo giusto per richiamare un singolo attributo, magari serve a qualche altro imbranato come me: [PHP]$url = $xml->elemento[2]["url"]; 
 echo $url;[/PHP]