Salathe'nin cevabı bana yardımcı oldu, ancak SimpleXMLElement'in addChild yöntemini kullandığım için, çocukları ilk çocuk olarak daha şeffaf hale getirmek için bir çözüm aradım. çözümü DOM tabanlı işlevselliği alıp SimpleXMLElement bir alt sınıfta gizlemek için:
$xml = simplexml_load_file($inputFile, 'SimpleXMLElementEx');
Şimdi insertChildFirst arayabilirsiniz: Sonuçta
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;
}
}
, SimpleXML kullanılacak eleman sınıfı belirlemenizi sağlar yeni çocuğu ilk çocuk olarak eklemek için herhangi bir öğenin üzerinde. Yöntem, yeni elemanı bir SimpleXML öğesi olarak döndürür, bu nedenle addChild'e benzerdir. Tabii ki, öğeyi daha önce eklemek için kesin bir öğe belirtmek için bir insertChild yöntemi oluşturmak kolay olurdu, ancak şu anda ona ihtiyacım yok çünkü, ben karar verdim.
Yapabileceğinden emin değilim. Dokümantasyondan, SimpleXML'in ** gerçekten ** basit manipülasyon anlamına geldiği anlaşılıyor. – MvanGeest
Cs'yi başka bir yerde saklayamıyorum, kaldıramaz, B ekleyebilir ve Cs'yi bu geçici konumdan geri ekleyemez miyim? PHP'de çok iyi bilemiyorum .... –