DOM PHP ile, ben bir
Ben bu yüzden onun öğe adı
Ne DomElement unsuru adını değiştirerek ve çocuk ve özelliklerini tutmanın en basit yolu olurdu?
Edit: I have just found a very similar question (çok iyi cevabı yok gerçi). Em>
DOM PHP ile, ben bir
Ben bu yüzden onun öğe adı
Ne DomElement unsuru adını değiştirerek ve çocuk ve özelliklerini tutmanın en basit yolu olurdu?
Edit: I have just found a very similar question (çok iyi cevabı yok gerçi). Em>
Eğer importNode()
, yeni oluşturulan <person>
elemanı için <identity>
elemanın childNodes kopyalamak için kullanabilir miyim?
function changeName($node, $name) {
$newnode = $node->ownerDocument->createElement($name);
foreach ($node->childNodes as $child){
$child = $node->ownerDocument->importNode($child, true);
$newnode->appendChild($child, true);
}
foreach ($node->attributes as $attrName => $attrNode) {
$newnode->setAttribute($attrName, $attrNode);
}
$newnode->ownerDocument->replaceChild($newnode, $node);
return $newnode;
}
$domElement = changeName($domElement, 'person');
Belki de böyle bir şey çalışmak istiyorsunuz, yoksa cloneChild()
kullanarak deneyebilirsiniz.
Edit: Aslında, ben sadece orijinal işlevi düğüm yerleştirme kaybedeceğini fark. Thomasrutter bağlantılı söz göre, replaceChild()
kullanılmalıdır.
Yazınızın sayesinde, çabuk benim için aynı sorunu çözebilir. Ancak, ben bir DOM_NOT_FOUND istisna vardı. Orijinal sonrası 5 yaşında olduğu için bu, muhtemelen bir PHP Sürümü konudur.
PHP Dokümantasyon (Şubat 2014) göre,
DOM_NOT_FOUND
Raised if oldnode is not a child of this node.
Yani, yerini almış
$newnode->ownerDocument->replaceChild($newnode, $node);
ile
$node->parentNode->replaceChild($newnode, $node);
İşte tam fonksiyon (test) 'dir:
public static function changeTagName($node, $name) {
$childnodes = array();
foreach ($node->childNodes as $child){
$childnodes[] = $child;
}
$newnode = $node->ownerDocument->createElement($name);
foreach ($childnodes as $child){
$child2 = $node->ownerDocument->importNode($child, true);
$newnode->appendChild($child2);
}
foreach ($node->attributes as $attrName => $attrNode) {
$newnode->setAttribute($attrName, $attrNode);
}
$node->parentNode->replaceChild($newnode, $node);
return $newnode;
}
Size bu işlevi kullanmak istediğinizde diğer mesajlar açıklandığı şekilde, tersten DOM Ağacı çapraz gerektiğini de belirtmekte yarar var.