2009-02-04 16 views
6

PHP में किसी XML फ़ाइल को पार्स करने का सबसे अच्छा तरीका कौन सा है?PHP एक्सएमएल पार्सिंग

पहले
डोम वस्तु

//code 
$dom = new DOMDocument(); 
$dom->load("xml.xml"); 

$root = $dom->getElementsByTagName("tag"); 
foreach($root as $tag) 
{ 
$subChild = $root->getElementsByTagName("child"); 

// extract values and loop again if needed 
} 

दूसरा
simplexml_load विधि

// code 
$xml = simplexml_load_string("xml.xml"); 
$root = $xml->root; 
foreach($root as $tag) 
{ 
$subChild = $tag->child; 
// extract values and loop again if needed 
} 

नोट का उपयोग का उपयोग करना: इन दो मैं के बारे में पता कर रहा हूँ कर रहे हैं। में नहीं हैं, तो अधिक भरें।

पता करने के लिए कौन सी विधि विशाल एक्सएमएल फाइल पार्स करने के लिए सबसे अच्छा है चाहता था, यह भी जो विधि है सबसे तेजी से रास्ता विधि

आकार होगा कार्यान्वित किए जाने की आवश्यकता पर ध्यान दिए बिना 500 केबी से 2 एमबी तक भिन्न है। यदि संभव हो तो पार्सर कम स्मृति उपयोग के साथ कम से कम समय में छोटी और बड़ी फ़ाइलों को पार्स करने में सक्षम होना चाहिए।

+0

जब हम "विशाल" कहते हैं तो हम कितने बड़े बात कर रहे हैं? मेगाबाइट लायक है? –

उत्तर

4

मैंने XML फ़ाइलों को पार्स करने के लिए XMLReader का उपयोग करना शुरू कर दिया है। चारों ओर घूमने के बाद यह एक्सएमएल फाइलों को पार्स करने का सबसे अच्छा तरीका है क्योंकि यह पूरी एक्सएमएल फाइल को स्मृति में लोड नहीं करता है। मान लें कि अगर मेरी एक्सएमएल फाइलें 5 एमबी थीं, तो मेरी स्मृति की XMLReader 5MB का उपयोग करके इसे पार्स करना बर्बाद नहीं होता है।

//usage 
$xml = new XMLReader(); 
$xml->XML($xmlString); 
while($xml->read) 
{ 
if($xml->localName == 'Something') // check if tag name equals something 
{ 
//do something 
} 
} 

एक्सएमएल रीडर का उपयोग करता है, तो वर्तमान टैग एक खुलने वाला टैग या अंतिम टैग है और के रूप में आवश्यक आवश्यक कार्रवाई करने हम पा सकते हैं।

1

मैं आसानी से उपयोग के लिए simplexml_load_string पसंद करता हूं। प्रसंस्करण की गति एक्सएमएल फ़ाइल के प्रारूप पर निर्भर हो सकती है यदि दोनों फ़ाइल को पार्स करने के विभिन्न तरीकों का उपयोग करते हैं - इसे अपनी फाइलों पर आज़माएं और देखें कि आपके लिए कौन सा बेहतर है।

4

यह आपके द्वारा गुजरने वाले दस्तावेज़ पर निर्भर करता है, लेकिन XMLReader आमतौर पर सरलxml और DOM (http://blog.liip.ch/archive/2004/05/10/processing_large_xml_documents_with_php.html) दोनों से तेज़ होता है। व्यक्तिगत तौर पर मैं XMLReader उपयोग नहीं किया है और आम तौर पर जो के आधार पर उपयोग करने के लिए किया जाए या नहीं मैं इसे संपादित करने की आवश्यकता का फैसला किया है, हालांकि:

  • SimpleXML अगर मैं सिर्फ एक दस्तावेज़
  • डोम पढ़ रहा हूँ अगर मैं को संशोधित कर रहा हूँ डोम और इसे वापस सहेजना

आप सरलxml और DOM के बीच वस्तुओं को भी परिवर्तित कर सकते हैं।

1

जब मैं विकसित करता हूं तो सभी एक्सएमएल को PHP में सरल एक्सएमएल द्वारा संभाला जाता है। इसे आसानी से बढ़ाया जाता है और आवश्यकता होने पर विधियों को अधिलेखित किया जाता है।

+0

simpleXML विस्तार के लिए वास्तव में उपयुक्त नहीं है। आप कन्स्ट्रक्टर को ओवरराइड नहीं कर सकते हैं और आप बच्चे वर्ग में गुण नहीं जोड़ सकते हैं क्योंकि उन्हें नए नोड्स के रूप में लिया जाता है। विरासत की बजाय संरचना का उपयोग करना बेहतर है I'e 'simple'ML है' is a 'simpleXML की बजाय – meouw

2

यदि आप प्रसंस्करण कर रहे हैं विशाल फ़ाइलें उन्हें पार्स नहीं करती हैं। इसके बजाय XSLT लागू करें। इससे आपको बड़ी मात्रा में स्मृति और प्रसंस्करण का समय बचाया जाएगा।

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