2009-11-17 17 views
13

क्या मैं php फ़ाइल के साथ एक plist फ़ाइल को पार्स कर सकता हूं और इसे $_POST[''] की तरह सरणी में प्राप्त कर सकता हूं, इसलिए मैं $_POST['body'] पर कॉल कर सकता हूं और उस स्ट्रिंग को प्राप्त कर सकता हूं जिसमें <key> body है?php के साथ .plist फ़ाइल को पार्स कैसे करें?

उत्तर

1

"php plist पार्सर" के लिए Googling this ब्लॉग पोस्ट है कि आप के लिए क्या पूछ रहे हैं ऐसा करने में सक्षम हो रहा है कर दिया।

0

वहां कुछ पुस्तकालयों पर एक नज़र डालें लेकिन उनके पास बाहरी आवश्यकताएं हैं और अधिकतर लगती हैं। यहां एक ऐसा फ़ंक्शन है जो डेटा को सहयोगी सरणी में रखता है। यह मैंने कोशिश की कुछ निर्यातित आईट्यून प्लिस्ट फाइलों पर काम किया।

// pass in the full plist file contents 
function parse_plist($plist) { 
    $result = false; 
    $depth = []; 
    $key = false; 

    $lines = explode("\n", $plist); 
    foreach ($lines as $line) { 
     $line = trim($line); 
     if ($line) { 
      if ($line == '<dict>') { 
       if ($result) { 
        if ($key) { 
         // adding a new dictionary, the line above this one should've had the key 
         $depth[count($depth) - 1][$key] = []; 
         $depth[] =& $depth[count($depth) - 1][$key]; 
         $key = false; 
        } else { 
         // adding a dictionary to an array 
         $depth[] = []; 
        } 
       } else { 
        // starting the first dictionary which doesn't have a key 
        $result = []; 
        $depth[] =& $result; 
       } 

      } else if ($line == '</dict>' || $line == '</array>') { 
       array_pop($depth); 

      } else if ($line == '<array>') { 
       $depth[] = []; 

      } else if (preg_match('/^\<key\>(.+)\<\/key\>\<.+\>(.+)\<\/.+\>$/', $line, $matches)) { 
       // <key>Major Version</key><integer>1</integer> 
       $depth[count($depth) - 1][$matches[1]] = $matches[2]; 

      } else if (preg_match('/^\<key\>(.+)\<\/key\>\<(true|false)\/\>$/', $line, $matches)) { 
       // <key>Show Content Ratings</key><true/> 
       $depth[count($depth) - 1][$matches[1]] = ($matches[2] == 'true' ? 1 : 0); 

      } else if (preg_match('/^\<key\>(.+)\<\/key\>$/', $line, $matches)) { 
       // <key>1917</key> 
       $key = $matches[1]; 
      } 
     } 
    } 
    return $result; 
} 
+0

मैं ... क्या यह एक्सएमएल की कोशिश करने और विश्लेषण करने के लिए नियमित अभिव्यक्तियों का उपयोग कर रहा है? –

+0

एक्सएमएल पार्सर्स ने प्लिस्ट एंट्री की कुंजी/वैल्यू को ट्रैक में अलग-अलग इकाइयों के रूप में रखा है। यह उन्हें मुख्य मूल्य जिम्मेदार सरणी के रूप में रखता है।/शग –

+0

आप नई लाइनों और विशेष रूप से बनाए गए एक्सएमएल टैग पर भरोसा कर रहे हैं। –

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