Welcome to WebmasterWorld Guest from

Forum Moderators: coopster & jatar k

Message Too Old, No Replies

Add rss xmlns namespace definition to a php simplexml document?

Feedvalidator doesn't like xlmsn before xml type

10:02 am on Apr 15, 2010 (gmt 0)

New User

10+ Year Member

joined:July 22, 2006
posts: 29
votes: 0

I'm trying to create an itunes-valid podcast feed using php5's simplexml:

$xml_string = <<<XML
<?xml version="1.0" encoding="UTF-8"?>
$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 [apple.com...]

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">

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 [help]

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 advice gratefull received!
7:56 pm on Apr 17, 2010 (gmt 0)

New User

10+ Year Member

joined:July 22, 2006
posts: 29
votes: 0

Well, the conclusion is that php simplexml isn't capable of producing
an itunes-store-compliant podcast as specced at:
So, here's the workaround:
$xml_result = $xml_generator->asXML();
$xml_LeftHandSide = '<?xml version="1.0" encoding="UTF-8"?><rss
$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...
9:08 pm on Apr 17, 2010 (gmt 0)

Senior Member

WebmasterWorld Senior Member 10+ Year Member

joined:Oct 4, 2001
votes: 13

I've never understood why people bother with the built in XML functions in PHP. It's so easy to just generate and parse using custom code... Which, although not compiled like native PHP functions, does so much less processing that it's actually faster.

Join The Conversation

Moderators and Top Contributors

Hot Threads This Week

Featured Threads

Free SEO Tools

Hire Expert Members