Sto cercando di creare una semplice function wrapper per l'output dei miei errori in XML per un'applicazione Flash esistente. Ho già letto che SimpleXMLElement
non è necessariamente concepito per creare un nuovo documento XML, ma per me funziona bene finora e sto sostanzialmente sostituendo le stringhe concatenate.
Fino ad ora non ho avuto problemi di iterare e aggiungere / modificare attributi, valori, ecc. In questo esempio mi piacerebbe vedere il mio output in questo modo:
<ERROR>There is an error</ERROR>
Ma sto vedendo questo:
<ERROR> <ERROR>There is an error</ERROR> </ERROR>
Ecco il codice:
$msg = 'There is an error'; $xmlstr = "<ERROR></ERROR>"; $sxml = new SimpleXMLElement($xmlstr); $sxmlErr = $sxml->ERROR = $msg; echo $sxml->asXML();
Sembra che l'uso della syntax $obj->node
crei un nodo figlio. E l'unico modo per creare un'istanza di SimpleXMLElement
è passare il nodo genitore.
Il risultato è previsto. Il tuo $sxml
è il nodo radice, ad es. <ERROR/>
– usando l'operatore object $sxml
navigare verso un elemento figlio (se esiste) o aggiungere un nuovo elemento con quel nome (se non esiste). Poiché non c'è alcun elemento ERROR sotto il nodo ERROR radice, viene aggiunto.
Accedere invece al nodo radice per indice:
$msg = 'There is an error'; $xmlstr = "<ERROR></ERROR>"; $sxml = new SimpleXMLElement($xmlstr); $sxmlErr = $sxml[0] = $msg; echo $sxml->asXML();
Una buona pratica per non cadere in quel trap di root è usare il nome dell'elemento radice come nome della variabile che lo contiene, es
$error = new SimpleXMLElement('<ERROR/>'); $error[0] = 'There is an Error'; echo $error->asXML();
Vedi anche Un semplice programma per il nodo CRUD e il valore del nodo del file xml