2010-08-05 12 views
27

Por lo tanto, tengo este código que busca un nodo particular en mi archivo XML, desarma un nodo existente e inserta un nuevo nodo secundario con los datos correctos. ¿Hay alguna forma de que esta nueva información se guarde dentro del archivo XML real con simpleXML? Si no, ¿hay otro método eficiente para hacer esto?¿Cómo guardar el objeto SimpleXML cambiado de nuevo en el archivo?

public function hint_insert() { 

    foreach($this->hints as $key => $value) { 

     $filename = $this->get_qid_filename($key); 

     echo "$key - $filename - $value[0]<br>"; 

     //insert hint within right node using simplexml 
     $xml = simplexml_load_file($filename); 

     foreach ($xml->PrintQuestion as $PrintQuestion) { 

      unset($xml->PrintQuestion->content->multichoice->feedback->hint->Passage); 

      $xml->PrintQuestion->content->multichoice->feedback->hint->addChild('Passage', $value[0]); 

      echo("<pre>" . print_r($PrintQuestion) . "</pre>"); 
      return; 

     } 

    } 

} 

Respuesta

54

No estoy seguro Entiendo el problema. El método asXML() acepta un nombre de archivo opcional como param que guardará la estructura actual como XML en un archivo. Una vez que haya actualizado su XML con las sugerencias, simplemente guárdelo de nuevo en el archivo.

// Load XML with SimpleXml from string 
$root = simplexml_load_string('<root><a>foo</a></root>'); 
// Modify a node 
$root->a = 'bar'; 
// Saving the whole modified XML to a new filename 
$root->asXml('updated.xml'); 
// Save only the modified node 
$root->a->asXml('only-a.xml'); 
2

Si desea guardar la misma, puede utilizar dom_import_simplexml para convertir a un DomElement y guardar:

$dom = new DOMDocument('1.0'); 
$dom->preserveWhiteSpace = false; 
$dom->formatOutput = true; 
$dom->loadXML($simpleXml->asXML()); 
echo $dom->saveXML(); 
+0

Así que mirando mi código anterior, esto ahorrará mi objeto $ XML actualizado a lo $ nombre de archivo es? – ThinkingInBits

+0

Intenté cambiarlo a $ dom = new DOMDocument ('1.0'); \t \t \t $ dom-> preserveWhiteSpace = false; \t \t \t $ dom-> formatOutput = true; \t \t \t $ dom-> loadXML ($ xml-> asXML()); \t \t \t $ dom-> save ($ filename); Pero todavía no hay actualización en el archivo – ThinkingInBits

+0

Ok, en realidad sí funciona ahora con $ dom-> save ($ filename) ... ¡Gracias! – ThinkingInBits

Cuestiones relacionadas