DOMNode referans kez başka bir öğe e ekleyerek sonra artık çalışmıyor

1 Cevap php

Ben HTML üretmek için PHP5 sınıf DOMDocument etrafında bir sarıcı kullanıyorum. Bu kolay DOM kullanarak HTML değiştirmek için yapar.

Bir örnek eleman 1. oluşturma ve eleman # 2 ekleyerek ve yine doğrudan elemanı 1. değiştirmek mümkün olacak.

Bir sorun aşağıdaki ile ancak ortaya çıkar:

  • Eleman 1. element 2. eklenir
  • Eleman # 2 # 3 eleman eklenir
  • Öge 1 değiştirilmiş ancak hiçbir değişiklik (# 1 ve # 2 içeren) eleman # 3 DOM görünür

Basitleştirilmiş bir örnek kod:

<?php
$doc1 = new DOMDocument();
$el1 = $doc1->createElement('h1', 'Hello');
$doc1->appendChild($el1);

$doc2 = new DOMDocument();
$el2 = $doc2->createElement('h2', 'World');
$doc2->appendChild($el2);

$doc3 = new DOMDocument();
$el3 = $doc3->createElement('h3', 'Today');
$doc3->appendChild($el3);

// Import el1 into el2
$el1 = $doc2->importNode($el1, true);
$el2->appendChild( $el1 );
$doc1 = $doc2;

// Import el2 into el3
$el2 = $doc3->importNode($el2, true);
$el3->appendChild($el2);
$doc2 = $doc3;

// Modify el1
$el1->nodeValue = "Boo"; // This doesn't work?
//$el2->nodeValue = "Boo"; // Changing element2 or 3 works...

// Display result
echo $doc3->saveHTML();
?>`

Derin-kopyalanan ve $ EL3 en DOM eklenen çünkü $ El2 değiştirerek hala mümkündür. $ Hala $ doc2 / $ EL2 adlı DOM işaret ve herhangi bir değişiklik $ EL3 en DOM yansıtılmaz ancak el1.

Doğrudan $ EL3 en DOM doğru düğüme $ el1 işaret etmek için herhangi bir jenerik yolları var mı?

1 Cevap

$el2 = $doc3->importNode($el2, true);

Ayrıca $ e2 ekli olan $ e1 bir kopyasını yapmak, yani Burada, $ EL2 derin bir kopyasını yapmak. Daha sonra $ e1 düğüm değerini değiştirmek zaman $ e1 klon / derin bir kopyasını etkilemez.