Est-il possible d'utiliser XMLWriter de php pour insérer un nouveau noeud dans un fichier xml existant, puis enregistrer le fichier. Ce serait beaucoup plus utile pour moi que de créer un fichier enw chaque fois que je veux mettre à jour un fichier xml.PHP ajoute un noeud au fichier xml existant et enregistre
Répondre
Vous pouvez utiliser PHP de Simple XML. Vous devez lire le contenu du fichier, ajouter le noeud avec Simple XML et écrire le contenu.
J'utiliser simplexml
à la place. Je sors d'un flanc et je suppose que si vous avez un écrivain XML, vous avez aussi simplexml.
Voyons voir, d'ajouter un nœud, supposons un très simple fichier xml (get it?):
<desserts>
<cakes>
<cake>chocolate</cake>
<cake>birthday</cake>
</cakes>
<pies>
<pie>apple</pie>
<pie>lemon</pie>
</pies>
</desserts>
Si cela est dans un fichier et que vous souhaitez ajouter une nouvelle tarte, vous faire:
$desserts = new SimpleXMLElement;
$desserts->loadfile("desserts.xml");
$desserts->pies->addChild("pie","pecan");
Il peut être beaucoup plus sophistiqué que cela, bien sûr. Mais une fois que vous avez compris, c'est très utile.
Le problème général est ici qu'un document XML bien formé doit avoir qu'un seul élément racine. Cela signifie que vous devez lire/analyser dans l'arbre complet du document pour pouvoir ajouter un nouvel élément à l'intérieur. D'où toutes les suggestions simplexml ici.
XMLWriter est destiné à écrire un flux XML de données très efficace, mais ne peut pas modifier les fichiers existants (sans les lire en premier).
Voir ce fil sur perlmonks.com où les fichiers journaux XML sont discutés. Particulièrement intéressant est le commentaire de "mirod" qui montre comment avoir un fichier XML bien formé tout en étant capable d'ajouter des noeuds à un document. La solution consiste à placer les noeuds arbitraires dans un fichier séparé (qui n'est pas bien formé en soi à cause de l'élément racine déconnant) et à référencer le fichier en tant qu'entité externe. Dans votre cas, vous écririez le fichier qui sera inclus en tant qu'entité avec la fonction PHP fopen standard, ffrite fclose lors de l'ouverture du fichier à ajouter.
$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");
Cela fonctionne parfaitement bien. Et vous pouvez pouvez ajouter des attributs à l'hamburger aussi
- 1. Ajouter un noeud existant au nœud enfant d'un autre noeud
- 2. Comment ajouter le noeud au document XML existant
- 3. Comment insérer XML dans un noeud XML existant
- 4. Suppression du noeud XML PHP
- 5. PHP XML - Insertion d'un noeud XML à un emplacement spécifique
- 6. Ajout d'un fichier XML existant
- 7. Ajouter des éléments (nœuds) à un fichier xml existant à l'aide de php
- 8. comment écrire dans le fichier XML existant en utilisant php
- 9. Comment télécharger un fichier existant en PHP
- 10. Comment ajouter un attribut au noeud Nokogiri?
- 11. ajouter noeud XML au premier du noeud parent de ce
- 12. Ajouter un enfant au format XML avec PHP simpleXML
- 13. Drupal enregistre un noeud avec les champs obligatoires non renseignés
- 14. Sedna: Ajouter un fichier XML au document
- 15. LINQ to XML - Ajout d'un noeud à un fichier .csproj
- 16. Ouvrir avec DW ajoute un dossier/fichier au dossier .svn
- 17. comment utiliser libxml2 pour modifier un fichier xml existant?
- 18. Conversion d'un fichier SGM en XML existant
- 19. Ajouter à un noeud existant groovy.util.Node avec la syntaxe groovy.xml.MarkupBuilder?
- 20. Python - ajoute une colonne à un fichier séparé par tabulation existant
- 21. XML: supprimer le noeud enfant d'un noeud
- 22. Trouver un noeud enfant XML
- 23. Écrire un fichier XML à partir du noeud spécifié?
- 24. Modification de la valeur de l'élément de noeud XML dans fichier PHP et enregistrer
- 25. dom en PHP enregistre le nouveau contenu sur l'ancien fichier
- 26. VB.NET insertion de nœuds xml dans un document XML existant
- 27. updatin xml en php
- 28. C# Foreach Noeud XML
- 29. Convertir un noeud XML à un MovieClip
- 30. Lire et écrire un fichier XML avec PHP
ce que la plupart des parseurs XML comprennent/fichiers de référence de poignée assez bien compter sur cette solution? Et cette idée de nœuds liés n'étant pas validée est-elle une idée assez sûre et comprise? Je pourrais voir comment cela se passerait, si le navigateur/client/analyseur ne descend qu'en aval de la référence, mais est-ce qu'il y a une chance que ce soit pour protéger contre les références malformées dont il aura besoin pour valider tout le document? ou doit-il juste être valide dans le contexte du document xml primaire? – Anthony
Je ne connais pas beaucoup d'analyseurs syntaxiques XML pour savoir si "la plupart" des analyseurs prennent en charge l'expansion d'entités. Je travaille principalement avec PHP et l'analyseur XML PHP (un wrapper autour de xmllib) le supporte. Après l'inclusion, le document complet doit être bien formé. Je vais modifier ma réponse pour refléter cela. – chiborg