2010-03-15 14 views
5

सहेजें क्या यह मौजूदा xml फ़ाइल में नया नोड डालने के लिए php के XMLWriter का उपयोग करना संभव है, और फिर फ़ाइल को सहेजें। यह मेरे लिए बहुत अधिक फायदेमंद होगा जो वास्तव में एक एक्सएम फाइल बनाते हैं जब भी मैं एक एक्सएमएल फ़ाइल अद्यतन करना चाहता हूं।PHP मौजूदा xml फ़ाइल में नोड जोड़ें और

उत्तर

2

आप PHP के Simple XML का उपयोग कर सकते हैं। आपको फ़ाइल सामग्री को पढ़ना है, सरल एक्सएमएल के साथ नोड जोड़ें और सामग्री को वापस लिखें।

7

मैं इसके बजाय simplexml का उपयोग करूंगा। मैं एक अंग पर बाहर जा रहा हूं और यह मान रहा हूं कि यदि आपके पास एक्सएमएल लेखक है तो आपके पास सरलxml भी है।

चलो, देखते हैं एक नोड को जोड़ने के लिए, के एक बहुत ही सरल मान लें xml फ़ाइल (इसे पाने के?):

<desserts> 
    <cakes> 
     <cake>chocolate</cake> 
     <cake>birthday</cake> 
    </cakes> 
    <pies> 
     <pie>apple</pie> 
     <pie>lemon</pie> 
    </pies> 
</desserts> 

यह एक फ़ाइल में है, तो और आप एक नया पाई, तो आप हैं जोड़ना चाहते हैं कार्य करें:

$desserts = new SimpleXMLElement; 

$desserts->loadfile("desserts.xml"); 

$desserts->pies->addChild("pie","pecan"); 

यह भी बहुत कुछ इस से परिष्कृत, निश्चित रूप से हो सकता है। लेकिन एक बार जब आप इसे लटका लेंगे, तो यह बहुत उपयोगी होगा।

0

सामान्य समस्या यह है कि एक अच्छी तरह से गठित XML दस्तावेज़ में केवल एक मूल तत्व होना चाहिए। इसका मतलब है कि अंदर एक नया तत्व जोड़ने में सक्षम होने के लिए आपको पूरे दस्तावेज़ पेड़ में पढ़ना/विश्लेषण करना होगा। इसलिए यहां सभी सरल सुझाव सुझाव।

XMLWriter डेटा की एक्सएमएल स्ट्रीम को बहुत कुशलता से लिखने के लिए है, लेकिन मौजूदा फ़ाइलों को संशोधित नहीं कर सकता (उन्हें पहले पढ़ने के बिना)।

इस धागे को perlmonks.com पर देखें जहां XML लॉग फ़ाइलों पर चर्चा की गई है। विशेष रूप से दिलचस्प "मिरोड" द्वारा टिप्पणी है जो दिखाती है कि एक अच्छी तरह से बनाई गई XML फ़ाइल कैसे है और अभी भी किसी दस्तावेज़ में नोड्स जोड़ने में सक्षम है। समाधान मनमानी नोड्स को एक अलग फ़ाइल में रखना है (जो गड़बड़ मूल तत्व के कारण स्वयं पर अच्छी तरह से गठित नहीं है) और फ़ाइल को बाहरी इकाई के रूप में संदर्भित करता है। आपके मामले में, आप उस फ़ाइल को लिखेंगे जो संलग्न करने के लिए फ़ाइल खोलते समय मानक PHP फॉपेन, fwrite fclose फ़ंक्शन के साथ एक इकाई के रूप में शामिल किया जाएगा।

+0

क्या अधिकांश एक्सएमएल पार्सर इस समाधान पर भरोसा करने के लिए संदर्भ फ़ाइलों को समझने/संभालते हैं? और क्या यह विचार नोड्स के विचार को एक सुंदर सुरक्षित और समझा विचार मान्य नहीं किया जा रहा है? मैं देख सकता था कि यह कैसे होगा, यदि ब्राउजर/क्लाइंट/पार्सर केवल संदर्भ से नीचे की ओर जाता है, लेकिन क्या कोई मौका है कि विकृत संदर्भों के खिलाफ सुरक्षा के लिए इसे पहले पूरे दस्तावेज़ को सत्यापित करने की आवश्यकता होगी? या क्या इसे प्राथमिक xml दस्तावेज़ के संदर्भ में मान्य होना चाहिए? – Anthony

+0

मुझे पता नहीं है कि "अधिकांश" पार्सर्स इकाई विस्तार का समर्थन करते हैं या नहीं, मुझे यह जानने के लिए कई एक्सएमएल पार्सर्स नहीं हैं। मैं ज्यादातर PHP और PHP एक्सएमएल पार्सर (xmllib के चारों ओर एक रैपर) के साथ काम करता हूं। समावेशन के बाद, पूरा दस्तावेज़ अच्छी तरह से गठित होना चाहिए। मैं इसे प्रतिबिंबित करने के लिए अपना उत्तर संपादित करूंगा। – chiborg

-1
$xml_doc = new DomDocument; 

$xml_doc->Load('yourfilename.xml'); 

$desserts = $xml_doc->getElementsByTagName('desserts')->item(0); 

$burger =$xml_doc->createElement('burger'); 

$desserts->appendChild($burger); 

$done = $xml_doc->save("yourfilename.xml"); 

यह काम पूरी तरह से अच्छा है। और आप बर्गर में विशेषताओं को भी जोड़ सकते हैं

संबंधित मुद्दे