- Home
- Categorie
- Coding e Sistemistica
- PHP
- Aggiungere Nodo Xml
-
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]