2010-08-05 9 views
27

तो, मेरे पास यह कोड है जो मेरी एक्सएमएल फ़ाइल में एक विशेष नोड की खोज करता है, मौजूदा नोड को अनसेट करता है और सही डेटा के साथ एक नया नया बच्चा नोड डालता है। क्या सरल XML फ़ाइल के साथ वास्तविक XML फ़ाइल में सहेजने के लिए यह नया डेटा प्राप्त करने का कोई तरीका है? यदि नहीं, तो ऐसा करने के लिए कोई और कुशल तरीका है?परिवर्तित SimpleXML ऑब्जेक्ट को वापस फ़ाइल में कैसे सहेजने के लिए?

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; 

     } 

    } 

} 

उत्तर

54

सुनिश्चित नहीं है कि मैं इस मुद्दे को समझता हूं। asXML() विधि एक वैकल्पिक फ़ाइल नाम को param के रूप में स्वीकार करता है जो वर्तमान संरचना को XML में फ़ाइल के रूप में सहेज लेगा। तो एक बार जब आप संकेतों के साथ अपने एक्सएमएल को अपडेट कर लेंगे, तो उसे वापस फाइल में सेव करें।

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

आप एक ही सहेजना चाहते हैं, तो आप dom_import_simplexml उपयोग कर सकते हैं एक DomElement में बदल जाएंगे और बचाने के लिए:

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

तो ऊपर मेरे कोड को देख, यह मेरा अद्यतन $ एक्सएमएल वस्तु की बचत होगी करने के लिए जो कुछ भी $ फ़ाइल नाम है? – ThinkingInBits

+0

मैंने इसे $ 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-> सहेजें ($ filename); लेकिन अभी भी – ThinkingInBits

+0

फ़ाइल में कोई अपडेट नहीं है, वास्तव में यह अब $ dom-> save ($ filename) के साथ काम करता है ... धन्यवाद! – ThinkingInBits