SimpleXML: Sıralama XML - üstünde Yeri XML Yazılar

2 Cevap php

Web siteme slayt aracı için yeni görüntüler oğul eklemek için SimpleXML kullanarak Im, kod şöyle bir şey:

$xml_toload = $_SERVER['DOCUMENT_ROOT']. '/xml/'.$country.'/compact.xml';
$xml = simplexml_load_file($xml_toload); //This line will load the XML file. 

$sxe = new SimpleXMLElement($xml->asXML());
//In this line it create a SimpleXMLElement object with the source of the XML file. 
//The following lines will add a new child and others child inside the previous child created. 
$image = $sxe->addChild('image');
$image->addAttribute('imageURL',$file);
$image->addAttribute('thumbURL',$file);
$image->addAttribute('linkURL',$linkurl);
$image->addAttribute('linkTarget',$linkurl);
$image->addChild('caption',$caption);

$sxe->asXML($xml_toload);

Which is working perfectly to add the new <image attr="blabla"><caption>imageinfo</caption><image> child, inside of <imagegallery></imagegalley>

Ama ciddi bir sorun var, ben bu sadece <imagegallery>, etiket kapalı değil önce, (birbiri ardına) sonra gitmek oğul gerekir, bu Resimgalerisi son yerde, yeni görüntüler görünmesini sağlar slayt.

Geçen önce gibi, xml ekledi Yani eklemek yeni orkideleri, gitmeli

<imagegallery>
<image attr="HEREGOESTHENEWST">
    <caption>description</caption>
</image>
<image attr="THEOLDONE">
    <caption>description</caption>
</image>
</imagegallery>

Anyone can help me with a clear example? Thank you, its urgent!

2 Cevap

SimpleXML manipülasyon bu tür desteklemiyor. Şu anda, sadece çocukları ekleyebilirsiniz. Ağacında keyfi yerlerde çocukları eklemek için DOM ve DOMNode::insertBefore(), özellikle gerekir. Sorun DOM ayrıntılı olduğunu ve o can sıkıcı kullanmak için yapar, bir şeyler bu tür yapmak zorunda, ben SimpleXML ve DOM bir karışımı kullanabilirsiniz yüzden olmasıdır. Sonuç olarak uygun bir SimpleDOM: use DOM methods with SimpleXML grammar adlı bir kütüphane oldu.

Ayrıca, burada iyi uygulama tavsiye birkaç ipucu var:

  • Eğer düğüm sonra bir SimpleXMLElement nesne, isim yaratacağı zaman onu temsil eder. Bunun adı $xml. Asla "XML" it metin var, bir işaretleme dilidir. Ben bir $xml VAR görürsem ben bu metni içeren düşünmek istiyorum.
  • Aynı senin $xml_toload var için geçerlidir. Bu XML içermeyen, bir dosya yolunu içerir. Bu nedenle, $filepath gibi bir şey adlı olmalıdır.
  • Her şey için addAttribute() veya addChild() kullanmak zorunda değilsiniz. Bu dizi gösterim ve / veya nesne gösterimini kullanmak genellikle basittir.

Sonuç komut:

include 'SimpleDOM.php';

// create an <image/> element
$image = new SimpleXMLElement('<image/>');
$image['imageURL']   = $file;
$image['thumbURL']   = $file;
$image['linkURL']    = $linkurl;
$image['linkTarget'] = $linkurl;
$image->caption      = $caption;

// load the file
$path_to_file = $_SERVER['DOCUMENT_ROOT']. '/xml/'.$country.'/compact.xml';
$imagegallery = simpledom_load_file($path_to_file);

// insert the new element before the first <image/>
$imagegallery->insertBefore($image, $imagegallery->image[0]);

// save the file
$imagegallery->asXML($path_to_file);

I DOM API yerine SimpleXML kullanarak öneririm. insertBefore aradığınız ne gibi görünüyor.