È possibile utilizzare XMLWriter di php per inserire un nuovo nodo in un file xml esistente e quindi salvare il file. Questo sarebbe molto più utile per me creare effettivamente un file enw ogni volta che voglio aggiornare un file xml.PHP aggiunge nodo al file xml esistente e salva
risposta
È possibile utilizzare PHP Simple XML. Devi leggere il contenuto del file, aggiungere il nodo con Simple XML e scrivere di nuovo il contenuto.
Vorrei utilizzare simplexml
invece. Sto uscendo su un arto e partendo dal presupposto che se hai uno scrittore XML hai pure simplexml.
Vediamo, per aggiungere un nodo, supponiamo che un semplice file XML (get it?):
<desserts>
<cakes>
<cake>chocolate</cake>
<cake>birthday</cake>
</cakes>
<pies>
<pie>apple</pie>
<pie>lemon</pie>
</pies>
</desserts>
Se questo è in un file, e si desidera aggiungere una nuova torta, si sarebbe fare:
$desserts = new SimpleXMLElement;
$desserts->loadfile("desserts.xml");
$desserts->pies->addChild("pie","pecan");
Può essere molto più sofisticato di questo, naturalmente. Ma una volta capito, è molto utile.
Il problema generale qui è che un documento XML ben formato deve avere un solo elemento radice. Ciò significa che devi leggere/analizzare l'albero del documento completo per poter aggiungere un nuovo elemento all'interno. Quindi tutti i suggerimenti di simplexml qui.
XMLWriter è pensato per scrivere un flusso XML di dati in modo molto efficiente, ma non può modificare i file esistenti (senza leggerli prima).
Vedere questa discussione su perlmonks.com dove vengono discussi i file di registro XML. Particolarmente interessante è il commento di "mirod" che mostra come avere un file XML ben formato ed essere ancora in grado di aggiungere nodi a un documento. La soluzione è posizionare i nodi arbitrari in un file separato (che non è ben formato da solo a causa dell'elemento radice di messing) e fare riferimento al file come entità esterna. Nel tuo caso, scriveresti il file che verrà incluso come entità con la funzione PHP standard fopen, fwrite fclose durante l'apertura del file per l'aggiunta.
$xml_doc = new DomDocument;
$xml_doc->Load('yourfilename.xml');
$desserts = $xml_doc->getElementsByTagName('desserts')->item(0);
$burger =$xml_doc->createElement('burger');
$desserts->appendChild($burger);
$done = $xml_doc->save("yourfilename.xml");
Questo lavoro perfettamente. E puoi anche aggiungere attributi al burger
- 1. OpenCV aggiunge il frame al file video esistente (.avi)?
- 2. Letsencrypt aggiunge dominio al certificato esistente
- 3. Python Lxml - Aggiunge un xml esistente con nuovi dati
- 4. Salva file con nuovo nome file: aggiungi al nome file esistente
- 5. Come sostituire nodo XML con SimpleXMLElement PHP
- 6. lxml non aggiunge newline quando si inserisce un nuovo elemento nel file xml esistente
- 7. Salva array come xml
- 8. Un semplice programma per i valori di nodo e nodo CRUD del file xml
- 9. PHP Crea e salva un file txt nella directory principale
- 10. prendere oggetto PowerShell Salva come XML e carico in C#
- 11. Modifica nodo XML valore dell'elemento in PHP e salvare il file
- 12. PHP: verifica se il nodo XML esiste con l'attributo
- 13. Salva come XML con VBA?
- 14. come aggiungere una proprietà al nodo esistente neo4j cypher?
- 15. aggiunge ".js" al nome del file
- 16. simbolo duplicato _kCDVFilesystemURLPrefix quando si aggiunge il plug-in di file cordova al progetto ios esistente
- 17. salva le eccezioni al file in python
- 18. mod_rewrite Aggiunge estensione .php
- 19. Leggi il file xml, modifica i valori/aggiungi elementi/attributi e salva il xml come?
- 20. Creazione di un nodo XML con valore null in php
- 21. Apri SDK XML - Salva un file modello (.xltx in .xlsx)
- 22. Salva già installato plugin Cordova al file config.xml
- 23. file Unisci XML in PHP
- 24. selezionare XML nodo utilizzando LINQ to XML
- 25. Usando nomi nodo XML con trattini in PHP
- 26. Rimuovere tutti i bambini da un nodo XML PHP DOM
- 27. Salva Open XML come PDF
- 28. Conversione dal file SVG al file XML
- 29. Perl e XML: Smart: come rimuovere un nodo da un file XML
- 30. C# - Salva lista <T> di file XML
La maggior parte dei parser XML capisce/gestisce i file di riferimento abbastanza bene da basarsi su questa soluzione? E questa idea di nodi collegati non viene convalidata un'idea abbastanza sicura e comprensibile? Potrei vedere come sarebbe, se il browser/client/parser va solo a valle del riferimento, ma c'è qualche possibilità che per proteggersi da riferimenti malformati debba prima convalidare l'intero documento? o ha solo bisogno di essere valido nel contesto del documento xml primario? – Anthony
Non conosco molti parser XML per sapere se i parser "più" supportano l'espansione dell'entità. Io lavoro principalmente con PHP e il parser XML PHP (un wrapper su xmllib) lo supporta. Dopo l'inclusione, il documento completo deve essere ben formato. Modificherò la mia risposta per riflettere questo. – chiborg