sto in fase di elaborazione una vasta file XML, per fare un po del trattamento più semplice che ho usato il seguente metodo come detto ampiamente su stack overflowConversione XML in array PHP con JSON sta cancellando le caratteristiche su alcuni elementi
$xml = simplexml_load_string($xml_string);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
questo è stato impressionante, ma andare oltre il mio codice ho notato alcuni casi in cui gli attributi su alcuni elementi non sono la conversione in modo corretto, in questa fase $json = json_encode($xml);
Ecco un esempio XML ridotta.
<?xml version="1.0"?>
<property>
<landDetails>
<area unit="squareMeter"/>
</landDetails>
<buildingDetails>
<area unit="squareMeter">100</area>
</buildingDetails>
</property>
e qui è l'uscita.
Array (
[landDetails] => Array (
[area] => Array (
[@attributes] => Array (
[unit] => squareMeter
)
)
)
[buildingDetails] => Array (
[area] => 100
)
)
Come visto sopra, se l'elemento contiene alcuna informazione su quel nodo esatto gli attributi associati a tale elemento non vengono elaborati. Ciò sta causando una significativa perdita di dati tra la conversione.
Qualcuno sa come risolvere questo problema?
Grazie in anticipo!
Solo guardando un po 'di più il codice sopra non sembra passare in una matrice di attributi sui primi due elementi figlio xml? Ad esempio, utilizzando l'XML sopra se si aggiunge un attributo 'color =" red "' su 'property', quindi un attributo' color = "green" 'su' landDetails' e 'buildingDetails' e un' color = "blu "attributo su area". Solo l'attributo blu verrà esportato nell'array precedente. –
@DevonMather Destra, non so perché questo ciclo foreach è stato nel controllo has_children. In realtà, questo controllo has_children non era necessario. Ho capito che SimpleXML restituisce una stringa con spazi e interruzione di riga. 'trim' è sufficiente per rilevare se non ha un valore reale. Ho provato questo nuovo codice su diverse strutture XML, e ora sembra ok. :) – Sugar
Questo codice non sembra funzionare. ' xxx 'Qui' aaa' e 'bbb' non appaiono nell'output. –