2010-08-05 9 views
27

Tak, mam ten kod, który wyszukuje określonego węzła w moim pliku XML, kasuje istniejący węzeł i wstawia zupełnie nowy węzeł podrzędny z poprawnymi danymi. Czy istnieje sposób na uzyskanie tych nowych danych do zapisania w rzeczywistym pliku XML za pomocą simpleXML? Jeśli nie, czy istnieje inna skuteczna metoda?Jak zapisać zmieniony obiekt SimpleXML z powrotem do pliku?

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; 

     } 

    } 

} 

Odpowiedz

54

Nie jestem pewien, czy rozumiem problem. Metoda asXML() akceptuje opcjonalną nazwę pliku jako parametr, który zapisze aktualną strukturę jako plik XML. Po zaktualizowaniu pliku XML za pomocą wskazówek, zapisz go z powrotem w pliku.

// 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

Jeśli chcesz zapisać to samo, można użyć dom_import_simplexml przekonwertować na DOMElement i zapisać:

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

Więc patrząc na mojego kodu powyżej, to uratuje moją zaktualizowaną obiekt $ xml aby cokolwiek $ filename to? – ThinkingInBits

+0

Próbowałem zmienić to na $ 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); Ale wciąż brak aktualizacji w pliku – ThinkingInBits

+0

Ok, faktycznie działa teraz z $ dom-> save ($ filename) ... Dzięki! – ThinkingInBits

Powiązane problemy