Je souhaite insérer un noeud avec des enfants à un emplacement spécifique dans le fichier XML. Comment fait-on ça?PHP XML - Insertion d'un noeud XML à un emplacement spécifique
Par exemple. Si j'ai un XML comme:
<myvalues>
<image name="img01">
<src>test</src>
</image>
<image name="img02">
<src>test</src>
</image>
<image name="img03">
<src>test</src>
</image>
</myvalues>
Je veux insérer:
<image name="img11">
<src>test2</src>
</image>
entre <image name="img01">
& <image name="img02">
. Comment puis-je faire cela? J'utilise SimpleXML dès maintenant pour lire le XML.
Merci.
EDIT: J'ai essayé le code suivant. Mais, le nouveau noeud est ajouté au bas du XML en dehors de la structure XML.
$xml = new DomDocument();
$xml->preserveWhitespace = false;
$xml->load('myXMLFile.xml');
$newNode = $xml->createElement('tryimage');
$xpath = new DOMXpath($xml);
$elements = $xpath->query('/myvalues/image[name="img01"]');
$refNode = $elements->item(0);
$xml->insertBefore($newNode, $refNode->nextSibling);
header('Content-Type: text/plain');
echo $xml->saveXML();
La sortie est quelque chose comme ceci:
<xml....>
<myvalues>
<image name="01">
</image>
.
.
.
</myvalues>
<tryimage />
j'utiliser un XPath pour arriver au noeud d'image par son nom directement, mais à part ça +1 – Gordon
@Gordon: comment l'utilisation du XPath? @ircmaxell: Merci. Ce qui dans le cas je ne sais pas avant quel noeud je dois ajouter mais je sais après quel noeud je dois ajouter. Dans ce cas, puis-je utiliser insertBefore? Probablement quelque chose comme insertBefore ($ newNode, $ refNode-> nextSibling)? Est-ce que cela a du sens? – Blueboye
Bien sûr. DomNode-> nextSibling renverra null si c'est le dernier dans la liste, donc l'opération sera toujours cohérente et déterministe. Je vais éditer ma réponse avec le bit XPath ... – ircmaxell