Yaklaşık bir yıl önce ben PHP'nin XPath ve DOMDocument kullanarak DOM işlemek için izin verilen bir jQuery ilham kitaplığı yazdı. Geçenlerde o kadar temiz ve açık kaynak kodlu bir proje olarak yayınlamak istedim. Ben iyileştirmeler yapmak son birkaç gün geçirdikten ve PHP'nin OO bazı özellikleri daha fazlasını uygulayarak oldum.
Her neyse, ben sana şimdiki biriyle ayrı bir XML belgeyi birleştirmek için olanak sağlayan yeni bir yöntem eklemek düşündüm. Burada yakalamak bu yöntem 2 XPath ifadeleri sorar olmasıdır. İlki mevcut belgede birleştirmek istediğiniz öğeleri getirir. İkinci bu birleşmiş unsurların hedef yolunu belirtir.
Yöntem her iki yoldan getiriliyor eşleşen elemanları iyi çalışır, ama ben geçerli DOM'ye yabancı unsurları ithal ile ilgili sorunlar yaşıyorum. Ben korkunç 'Yanlış Belge Hatası' mesajı alıyorum.
Ben ne yaptığımı biliyordum düşündüm, ama ben yanlış olduğunu varsayalım. Aşağıdaki kodu bakarsanız, o zaman yabancı belgenin eşleşen elemanları aracılığıyla, unsurları eşleştirerek mevcut belgeler üzerinden ben ilk yineleme olduğumu görebiliyorum.
Ben Geçerli belgede hedef yoluna her yabancı eleman birleştirme çalışılıyor nerede ikinci iç içe döngü içinde.
Ben açıkça ekleme önce geçerli belgeye yabancı düğümü ithal kulüpler gibi ben burada yanlış yapıyorum ne emin değil.
public function merge($source, $path_origin, $path_destination)
{
$Dom = new self;
if(false == $Dom->loadXml($source))
{
throw new DOMException('XML source could not be loaded into the DOM.');
}
$XPath = new DOMXPath($Dom);
foreach($this->path($path_destination, true) as $Destination)
{
if(false == in_array($Destination->nodeName, array('#text', '#document')))
{
foreach($XPath->query($path_origin) as $Origin)
{
if(false == in_array($Destination->nodeName, array('#text', '#document')))
{
$this->importNode($Origin, true);
$Destination->appendChild($Origin->cloneNode(true));
}
}
}
}
return $this;
}
Aşağıdaki Github repo bütünüyle kütüphane bulabilirsiniz:
http://github.com/wilhelm-murdoch/DomQuery
Halps!