Cambia il text di root SimpleXML Element

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