Salathes Antwort hat mir geholfen, aber da ich die addChild-Methode von SimpleXMLElement verwendet habe, suchte ich nach einer Lösung, um Kinder als erstes Kind transparenter zu machen. Die Lösung besteht darin, dass die DOM-basierte Funktionalität zu nehmen und es in einer Unterklasse von SimpleXMLElement verstecken:
class SimpleXMLElementEx extends SimpleXMLElement
{
public function insertChildFirst($name, $value, $namespace)
{
// Convert ourselves to DOM.
$targetDom = dom_import_simplexml($this);
// Check for children
$hasChildren = $targetDom->hasChildNodes();
// Create the new childnode.
$newNode = $this->addChild($name, $value, $namespace);
// Put in the first position.
if ($hasChildren)
{
$newNodeDom = $targetDom->ownerDocument->importNode(dom_import_simplexml($newNode), true);
$targetDom->insertBefore($newNodeDom, $targetDom->firstChild);
}
// Return the new node.
return $newNode;
}
}
Immerhin ermöglicht SimpleXML angeben, welche Elementklasse zu verwenden:
$xml = simplexml_load_file($inputFile, 'SimpleXMLElementEx');
Jetzt können Sie insertChildFirst nennen auf ein beliebiges Element, um das neue Kind als erstes Kind einzufügen. Die Methode gibt das neue Element als SimpleXML-Element zurück, sodass es ähnlich wie addChild verwendet wird. Natürlich wäre es leicht möglich, eine insertChild-Methode zu erstellen, die es erlaubt, ein genaues Element anzugeben, um das Element vorher einzufügen, aber da ich das jetzt nicht brauche, habe ich mich entschieden, das nicht zu tun.
Ich bin mir nicht sicher, dass Sie können. Aus der Dokumentation geht hervor, dass SimpleXML für eine wirklich einfache Manipulation gedacht ist. – MvanGeest
Kann ich Cs nicht irgendwo anders speichern, sie entfernen, B hinzufügen und Cs von diesem temporären Speicherort hinzufügen? Ich bin einfach nicht sehr versiert in PHP .... –