Bir PHP SimpleXML belgeye rss xmlns ad alanı tanımı ekle?

2 Cevap php

Ben php5 en SimpleXML kullanarak itunes-geçerli podcast yayını oluşturmak için çalışıyorum:

<?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();

?>

Ben çizgi koymak lazım çünkü, doğrulamaz:

<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">

başına http://www.apple.com/itunes/podcasts/specs.html. olarak

Yani çıkış olabilir GEREKEN:

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
<channel>

vb Ben sadece doğru alınamıyor, üzerinde ve kılavuzu ve forumlarda oldum. Ben altbilgi yakın koyarsanız:

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();
?>

Sonra çeşit ateş doğru bakar ve artık tanımsız ad alanları hakkında şikayetçi değil, ama feedvalidator şikayet olduğunu

line 1, column 77: XML parsing error: :1:77: xml declaration not at start of external entity [help]

Belge şimdi başlıyor çünkü:

<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><?xml version="1.0" encoding="UTF-8"?>

olup

<?xml version="1.0" encoding="UTF-8"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">

2 Cevap

Bu çok mümkün SimpleXML ile. Sadece nitelik olarak değil, yapıcı dize içinde ad bildirmek.

$rss_xml = new SimpleXMLElement(
   '<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"/>');
$rss_xml->addAttribute('version', '2.0');

Bu doğru ad kullanmak değildir, çünkü söz gösterilen kod çalışmaz. Özellikle, bu satırları:

$tnsoundfile->addChild('itunes:author', "Author", ' ');

Onlar tabii ki yanlış "" (bir boşluk) ad, bir <author/> düğüm yaratacak. Bunu şöyle olmalıdır:

$tnsoundfile->addChild('itunes:author', "Author", 'http://www.itunes.com/dtds/podcast-1.0.dtd');

Bu ad kullanmak doğru yoldur.