दिलचस्प पोस्ट
क्या मैं नियमित asp.NET वेब रूपों के साथ एएसपी.नेट एमवीसी का उपयोग कर सकता हूं? SWFobject का उपयोग करके, HTML कंटेनर को सूचित करने के लिए कि SWF समाप्त हो गया है क्या होगा अगर मैं एक अहस्ताक्षरित चर के लिए एक नकारात्मक मान निर्दिष्ट करता हूँ? क्या आप स्क्वैश जीटम प्रारूप-पैच के साथ एक पैच में करते हैं? शून्य मानों को छुपाना, समझना कि गोलांग यहां क्यों विफल रहता है सेलेनियम वेबड्राइवर: लोड करने के लिए जावास्क्रिप्ट (जेएस) के साथ जटिल पृष्ठ की प्रतीक्षा करें एक नई पंक्ति तक जब तक कंस को सफेद स्थान के साथ पढ़ा जाए? एंड्रॉइड ऐप क्रैशिंग (टुकड़ा और एक्सएमएल ऑनक्लिक) jQuery scrollRight? इंटेलीज आईडीईए को अप्रयुक्त संकुल हटाने से कैसे रोकें? माओरिक्स के साथ अपने मैक पर पीजी मणि स्थापित करने के लिए असंभव जांचें कि दो अनारॉर्डेड सूचियां समान हैं जावास्क्रिप्ट / जेक्यू पेज पुनः लोड होने तक काम नहीं कर रहा है जावा टाइमस्टैम्प – मैं दिनांक 23/09/2007 को एक टाइमस्टैम्प कैसे बना सकता हूं? मूल दस्तावेज़ के माध्यम से छाया डोम तत्वों तक पहुंचना संभव है?

PHP के लिए सर्वश्रेष्ठ XML पार्सर

मैंने पहले एक्सएमएल पार्सर का इस्तेमाल किया है, और यद्यपि यह ठीक काम करता है, मैं इसके साथ सामान्य रूप से खुश नहीं था, ऐसा लगा जैसे मैं उन चीजों के लिए काम कर रहा था जो मूलभूत कार्यक्षमता होनी चाहिए।

मैंने हाल ही में सोशल एक्सएमएल देखा है लेकिन मैंने इसे अभी तक नहीं किया है क्या यह कोई आसान है? दोनों क्या फायदे और नुकसान कर रहे हैं? आपके द्वारा उपयोग किए गए कोई अन्य पार्सर?

Solutions Collecting From Web of "PHP के लिए सर्वश्रेष्ठ XML पार्सर"

मुझे कहना होगा कि SimpleXML केक लेता है क्योंकि यह पहली बार एक एक्सटेंशन है, जो सी में लिखा गया है, और बहुत तेज है। लेकिन दूसरा, पार्स किए गए दस्तावेज़ को PHP ऑब्जेक्ट का रूप लेता है। तो आप $root->myElement जैसे "क्वेरी" कर सकते हैं

PHP के उपलब्ध XML एक्सटेंशन पर एक नज़र डालें और उन लोगों की चर्चा के लिए http://devzone.zend.com/243/ और http://devzone.zend.com/1035/ देखें।

एक्सएमएल पार्सर और सरल एक्सएमएल के बीच मुख्य अंतर यह है कि उत्तरार्द्ध एक पुल पार्सर नहीं है। सरल एक्सएमएल डीओएम एक्सटेंशन के ऊपर बनाया गया है और पूरी XML फ़ाइल को स्मृति में लोड करेगा। एक्सएमएल पार्सर जैसे XMLReader केवल वर्तमान नोड को स्मृति में लोड करेगा आप विशिष्ट नोड्स के लिए हैंडलर परिभाषित करते हैं जो पार्सर के साथ मुठभेड़ होने पर ट्रिगर हो जाएगा। यह तेज है और स्मृति पर बचाता है आप XPath का उपयोग करने में सक्षम नहीं होने के लिए उस के लिए भुगतान करते हैं।

निजी तौर पर, मुझे सोमैटएक्सएम काफी डोम से अधिक प्रदान करता है (इसलिए सरल) को सीमित करता है आप आसानी से DOM और SimpleXml के बीच स्विच कर सकते हैं, लेकिन मैं आम तौर पर परेशान नहीं होता और सीधे DOM मार्ग को जाता हूं। DOM W3C DOM API का कार्यान्वयन है, इसलिए आप इसके साथ अन्य भाषाओं से परिचित हो सकते हैं, उदाहरण के लिए जावास्क्रिप्ट

जब एक एक्सटेंशन उपलब्ध नहीं होता है तो यह त्वरित और आसान XML पार्सिंग के लिए एक उपयोगी कार्य है:

 <?php /** * Convert XML to an Array * * @param string $XML * @return array */ function XMLtoArray($XML) { $xml_parser = xml_parser_create(); xml_parse_into_struct($xml_parser, $XML, $vals); xml_parser_free($xml_parser); // wyznaczamy tablice z powtarzajacymi sie tagami na tym samym poziomie $_tmp=''; foreach ($vals as $xml_elem) { $x_tag=$xml_elem['tag']; $x_level=$xml_elem['level']; $x_type=$xml_elem['type']; if ($x_level!=1 && $x_type == 'close') { if (isset($multi_key[$x_tag][$x_level])) $multi_key[$x_tag][$x_level]=1; else $multi_key[$x_tag][$x_level]=0; } if ($x_level!=1 && $x_type == 'complete') { if ($_tmp==$x_tag) $multi_key[$x_tag][$x_level]=1; $_tmp=$x_tag; } } // jedziemy po tablicy foreach ($vals as $xml_elem) { $x_tag=$xml_elem['tag']; $x_level=$xml_elem['level']; $x_type=$xml_elem['type']; if ($x_type == 'open') $level[$x_level] = $x_tag; $start_level = 1; $php_stmt = '$xml_array'; if ($x_type=='close' && $x_level!=1) $multi_key[$x_tag][$x_level]++; while ($start_level < $x_level) { $php_stmt .= '[$level['.$start_level.']]'; if (isset($multi_key[$level[$start_level]][$start_level]) && $multi_key[$level[$start_level]][$start_level]) $php_stmt .= '['.($multi_key[$level[$start_level]][$start_level]-1).']'; $start_level++; } $add=''; if (isset($multi_key[$x_tag][$x_level]) && $multi_key[$x_tag][$x_level] && ($x_type=='open' || $x_type=='complete')) { if (!isset($multi_key2[$x_tag][$x_level])) $multi_key2[$x_tag][$x_level]=0; else $multi_key2[$x_tag][$x_level]++; $add='['.$multi_key2[$x_tag][$x_level].']'; } if (isset($xml_elem['value']) && trim($xml_elem['value'])!='' && !array_key_exists('attributes', $xml_elem)) { if ($x_type == 'open') $php_stmt_main=$php_stmt.'[$x_type]'.$add.'[\'content\'] = $xml_elem[\'value\'];'; else $php_stmt_main=$php_stmt.'[$x_tag]'.$add.' = $xml_elem[\'value\'];'; eval($php_stmt_main); } if (array_key_exists('attributes', $xml_elem)) { if (isset($xml_elem['value'])) { $php_stmt_main=$php_stmt.'[$x_tag]'.$add.'[\'content\'] = $xml_elem[\'value\'];'; eval($php_stmt_main); } foreach ($xml_elem['attributes'] as $key=>$value) { $php_stmt_att=$php_stmt.'[$x_tag]'.$add.'[$key] = $value;'; eval($php_stmt_att); } } } return $xml_array; } ?> 

नमस्ते मुझे लगता है कि SimpleXml बहुत उपयोगी है। और इसके साथ मैं xpath का उपयोग कर रहा हूं;

 $xml = simplexml_load_file("som_xml.xml"); $blocks = $xml->xpath('//block'); //gets all <block/> tags $blocks2 = $xml->xpath('//layout/block'); //gets all <block/> which parent are <layout/> tags 

मैं कई XML विन्यास का उपयोग करता हूं और इससे मुझे वास्तव में तेजी से पार्स करने में मदद मिलती है I SimpleXml C पर लिखा C इसलिए यह बहुत तेज है

यह इस बात पर निर्भर करता है कि आप XML फ़ाइलों के साथ क्या करने का प्रयास कर रहे हैं यदि आप बस एक्सएमएल फाइल (जैसे कि कॉन्फ़िगरेशन फ़ाइल) को पढ़ने की कोशिश कर रहे हैं, तो द बेस्ट फ्लीए को सरल एक्सएमएल के सुझाव देने में सही है क्योंकि यह बनाता है कि नेस्टेड अर्रेऑब्जेक्ट जैसे मान $ xml-> root-> बच्चे द्वारा सुलभ हो जाएगा

यदि आप एक्सएमएल फ़ाइलों को हेरफेर करने की कोशिश कर रहे हैं, तो आप संभवतः डॉओएम एक्सएमएल का इस्तेमाल कर रहे हैं

सीआरएक्सएमएल पार्सर पार्सर के लिए एक असली आसान है।

इस वर्ग को एक खोज फ़ंक्शन मिल गया है, जिसमें कोई नाम स्थान एक तर्क के रूप में नोड नाम है। यह नोड के लिए एक्सएमएल की खोज करता है और इस वर्ग के उपयोग से उस नोड तक पहुंचने के लिए एक्सेस स्टेटमेंट को प्रिंट करता है। यह वर्ग भी एक्सएमएल पीढ़ी को बहुत आसान बनाता है।

आप इस वर्ग को यहां पर डाउनलोड कर सकते हैं

http://freshmeat.net/projects/crxml

या phpclasses.org से

http://www.phpclasses.org/package/6769-PHP-Manipulate-XML-documents-as-array.html