我正在尝试使用php5的simplexml创建一个itunes有效的podcast提要:

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

?>

它不能证实,因为我得说:
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">

按照AA>
所以输出应该是:
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
<channel>

等等。我已经一遍又一遍地看手册和论坛,就是没法把它弄对。如果我放在页脚附近:
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();
?>

然后它在firefox中看起来不错,不再抱怨未定义的名称空间,但是feedvalidator抱怨
第1行,第77列:XML分析错误:
:1:77:xml声明不在
外部实体的开始[帮助]
因为文档现在开始:
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><?xml version="1.0" encoding="UTF-8"?>

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

最佳答案

这在simplexml中是非常可能的。只需在构造函数字符串中声明命名空间,而不是作为属性。

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

关于php - 将rss xmlns namespace 定义添加到php simplexml文档中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2644284/

10-13 02:01