Bir dize kullanarak bir düğüm haline XML enjekte

4 Cevap php

Ben, dizeleri olarak bir dizi için onları tasarruf XML onları dayak, bir dize olarak diziye yeni bir alt düğüm ekleyerek bir düğüm çocukları yeniden yaşıyorum ... şimdi ben dizi döngü istiyorum ve geri dışarı bunları yazmak Orijinal düğüm. Sorun bir dize kullanarak bir çocuk düğüm eklemek için nasıl bir şey bulamıyorum değildir.

Benim kodu için aşağıya bakın. Teşekkürler!

$xml = simplexml_load_file($url);

	$questionGroup = $xml->qa[intval($id)];

	$children = array(); //  create empty array

	foreach ($questionGroup->children() as $element) {  //  loop thru children
		array_push($children, $element->asXML()); // save XML into array
	}
	//unset($questionGroup->answer);
	//unset($questionGroup->question);

	//create new node
	$newNode = '<answer><title>'.$title.'</title><description>'.$description.'</description><subName>'.$subName.'</subName><date>'.$date.'</date><timestamp>'.$timestamp.'</timestamp></answer>';

	echo "children count: ".count($children);
	echo "<br /><br />";
	print_r($children);
	echo "<br /><br />";
	// insert new
	array_splice($children,intval($elementIndex),0,$newNode);
	echo "children count: ".count($children);
	echo "<br /><br />";
	print_r($children);
	echo "<br /><br />";
	echo $questionGroup->asXML();
	foreach ($children as $element) {  //  loop thru array 
		echo "<br /><br />";
		echo $element;
		//$questionGroup->addChild(simplexml_load_string($element));  //  add array element to the empty questionGroup

	} 
		echo "<br /><br />";
	echo "questionGroup: ".$questionGroup;

UPDATE: I found a function that I modified and was able to get working:

function append_simplexml(&$simplexml_to, &$simplexml_from)
{
   $childNode = $simplexml_to->addChild($simplexml_from->getName(), "");
    foreach ($simplexml_from->children() as $simplexml_child)
    {
	   $simplexml_temp = $childNode->addChild($simplexml_child->getName(), (string) $simplexml_child);
	   foreach ($simplexml_child->attributes() as $attr_key => $attr_value)
	   {
		  $simplexml_temp->addAttribute($attr_key, $attr_value);
	   }

	  // append_simplexml($simplexml_temp, $simplexml_child);
    }
}

Benim foreach () döngü bu kullanımı ile:

foreach ($children as $element) {  //  loop thru array 
	append_simplexml($questionGroup, new SimpleXMLElement($element));
}

4 Cevap

Ben modifiye ve çalışma almak başardı bir işlevi bulundu:

function append_simplexml(&$simplexml_to, &$simplexml_from)
{
   $childNode = $simplexml_to->addChild($simplexml_from->getName(), "");
    foreach ($simplexml_from->children() as $simplexml_child)
    {
           $simplexml_temp = $childNode->addChild($simplexml_child->getName(), (string) $simplexml_child);
           foreach ($simplexml_child->attributes() as $attr_key => $attr_value)
       {
              $simplexml_temp->addAttribute($attr_key, $attr_value);
       }

      // append_simplexml($simplexml_temp, $simplexml_child);
    }
}

Benim foreach () döngü bu kullanımı ile:

foreach ($children as $element) {  //  loop thru array 
    append_simplexml($questionGroup, new SimpleXMLElement($element));
}

Böyle bir şey yapmak mümkün olmalıdır:

$child = new SimpleXMLElement($newNode);

$yourxmlobject->addChild($child);

Teşekkürler Justin. Ben bunu kendi sürümü için yararlı bir ilham buldum gibi () sizin append_simplexml upvoted.

Sadece kendi soyundan - gerçi kod aracılığıyla okumak, o $ simplexml_to kökünden özelliklerini kopyalamak değil düşünüyorum. Bir sorun olup olmadığını :) tabii, kullanım durumunda bağlıdır.