/** * xml2json Test 6 * It tests the conversion of demo application xml into JSON format. * * XML characteristic to be tested: XML containing a large CDATA. * */ public function testUsingXML6() { // Set the XML contents that will be tested here. $xmlStringContents = <<<EOT <?xml version="1.0"?> <demo> <application> <name>Killer Demo</name> </application> <author> <name>John Doe</name> </author> <platform> <name>LAMP</name> </platform> <framework> <name>Zend</name> </framework> <language> <name>PHP</name> </language> <listing> <code> <![CDATA[ /* It may not be a syntactically valid PHP code. It is used here just to illustrate the CDATA feature of Zend_Xml2JSON */ <?php include 'example.php'; new SimpleXMLElement(); echo(getMovies()->movie[0]->characters->addChild('character')); getMovies()->movie[0]->characters->character->addChild('name', "Mr. Parser"); getMovies()->movie[0]->characters->character->addChild('actor', "John Doe"); // Add it as a child element. getMovies()->movie[0]->addChild('rating', 'PG'); getMovies()->movie[0]->rating->addAttribute("type", 'mpaa'); echo getMovies()->asXML(); ?> ]]> </code> </listing> </demo> EOT; // There are not going to be any XML attributes in this test XML. // Hence, set the flag to ignore XML attributes. $ignoreXmlAttributes = true; $jsonContents = ""; $ex = null; // Convert XNL to JSON now. // fromXml function simply takes a String containing XML contents as input. try { $jsonContents = JSON\JSON::fromXml($xmlStringContents, $ignoreXmlAttributes); } catch (\Exception $ex) { } $this->assertSame($ex, null, "Zend_JSON::fromXml returned an exception."); // Convert the JSON string into a PHP array. $phpArray = JSON\JSON::decode($jsonContents); // Test if it is not a NULL object. $this->assertNotNull($phpArray, "JSON result for XML input 6 is NULL"); // Test for one of the expected fields in the JSON result. $this->assertContains("Zend", $phpArray['demo']['framework']['name'], "The framework name field converted from XML input 6 is not correct"); // Test for one of the expected CDATA fields in the JSON result. $this->assertContains('echo getMovies()->asXML();', $phpArray['demo']['listing']['code'], "The CDATA code converted from XML input 6 is not correct"); }