में संस्थाओं डिकोडिंग मैं निम्नलिखित व्यवहार का सामना कर रहा हूँ:पीएचपी, SimpleXML, CDATA
$xml_string1 = "<person><name><![CDATA[ Someone's Name ]]></name></person>";
$xml_string2 = "<person><name> Someone's Name </name></person>";
$person = new SimpleXMLElement($xml_string1);
print (string) $person->name; # Someone's Name
$person = new SimpleXMLElement($xml_string2);
print (string) $person->name; # Someone's Name
$person = new SimpleXMLElement($xml_string1, LIBXML_NOCDATA);
print (string) $person->name; # Someone's Name
php डॉक्स का कहना है कि NOCDATA "मर्ज करें [s] पाठ नोड्स के रूप में CDATA"। मेरे लिए इसका मतलब है कि सीडीएटीए को तब टेक्स्ट नोड्स के समान माना जाएगा - या तीसरा उदाहरण का व्यवहार अब दूसरे उदाहरण के समान होगा।
मेरे पास एक्सएमएल (यह बाहरी स्रोत से फ़ीड है) पर नियंत्रण नहीं है, अन्यथा मैं केवल सीडीएटीए टैग को हटा दूंगा क्योंकि यह कुछ भी नहीं करता है और जो व्यवहार मैं चाहता हूं उसे खंडित करता हूं।
उपर्युक्त उदाहरण इस तरह से व्यवहार क्यों करता है? क्या SimpleXML को सीडीएटीए नोड्स को उसी तरह से संभालने का कोई तरीका है जिस तरह से यह टेक्स्ट नोड्स को संभालता है? "पाठ नोड्स के रूप में सीडीएटीए को मर्ज करें" वास्तव में क्या करता है, क्योंकि मुझे लगता है कि यह विकल्प समझ में नहीं आता है?
मैं डेटा खींचने के बाद वर्तमान में डिकोडिंग कर रहा हूं, लेकिन उपर्युक्त उदाहरण अभी भी मुझे समझ में नहीं आता है।
'print' स्ट्रिंग संदर्भ है, तो आपको उस मामले में स्ट्रिंग करने के लिए डालने की जरूरत नहीं है। – hakre
@ hakre लेकिन 'print' (अधिक सामान्य रूप से लिखे गए 'echo') को स्टैंड-इन के रूप में उपयोग करने की संभावना है, जबकि डीबगिंग के बाद कुछ और के साथ प्रतिस्थापित किया गया है, इसलिए मैं कहूंगा कि स्ट्रिंग-कास्टिंग को लगातार करने के लिए यह एक अच्छी आदत है बाद में भ्रम से बचें। – IMSoP