digitaltoast Posted April 16, 2010 Share Posted April 16, 2010 I'm trying to create an itunes-valid podcast feed using php5's simplexml: <?php $xml_string = <<<XML <?xml version="1.0" encoding="UTF-8"?> <channel> </channel> XML; $xml_generator = new SimpleXMLElement($xml_string); $tnsoundfile = $xml_generator->addChild('title', 'Main Title'); $tnsoundfile->addChild('itunes:author', "Author", ' '); $tnsoundfile->addChild('category', 'Audio Podcasts'); $tnsoundfile = $xml_generator->addChild('item'); $tnsoundfile->addChild('title', 'The track title'); $enclosure = $tnsoundfile->addChild('enclosure'); $enclosure->addAttribute('url', 'http://test.com'); $enclosure->addAttribute('length', 'filelength'); $enclosure->addAttribute('type', 'audio/mpeg'); $tnsoundfile->addChild('itunes:author', "Author", ' '); header("Content-Type: text/xml"); echo $xml_generator->asXML(); ?> It doesn't validate, because I've got to put the line: <rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"> as per http://www.apple.com/itunes/podcasts/specs.html. So the output SHOULD be: <?xml version="1.0" encoding="UTF-8"?> <rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"> <channel> etc. I've been over and over the manual and forums, just can't get it right. If I put, near the footer: header("Content-Type: text/xml"); echo '<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">'; echo $xml_generator->asXML(); ?> Then it sort of looks right in firefox and it doesn't complain about undefined namespaces anymore, but feedvalidator complains that line 1, column 77: XML parsing error: <unknown>:1:77: xml declaration not at start of external entity because the document now starts: <rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><?xml version="1.0" encoding="UTF-8"?> and not <?xml version="1.0" encoding="UTF-8"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"> Any ideas gratefully received! Thank you. Link to comment https://forums.phpfreaks.com/topic/198721-add-itunes-rss-xmlns-namespace-definition-to-a-php-simplexml-document/ Share on other sites More sharing options...
digitaltoast Posted April 17, 2010 Author Share Posted April 17, 2010 Well, the conclusion is that php simplexml isn't capable of producing an itunes-store-compliant podcast as specced at: http://www.apple.com/itunes/podcasts/specs.html So, here's the workaround: $xml_result = $xml_generator->asXML(); $xml_LeftHandSide = '<?xml version="1.0" encoding="UTF-8"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">'; $xml_RightHandSide = substr($xml_result, 22); echo $xml_LeftHandSide . $xml_RightHandSide . "</rss>"; et voila! feedvalidator and itunes are happy Wish I'd thought of this 5 nights ago... Link to comment https://forums.phpfreaks.com/topic/198721-add-itunes-rss-xmlns-namespace-definition-to-a-php-simplexml-document/#findComment-1043786 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.