我正在尝试使用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/