如何生成媒体:使用php内容xml

时间:2016-05-04 22:12:12

标签: php xml

我面临一些问题,我不知道如何解决它

我想用php和mysql编写以下rss feed:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<item>
<title>Here is the title</title>
<link>http://example.com</link>
<media:content medium="image" url="http://example.com/image.jpg"></media:content>
<media:content medium="video" url="http://example.com/video.mp4"></media:content>
</item>
</channel>
</rss>

这是我在php中的代码:

$db = new Db();

    $result = $db->select("select * from column");

    $xml = new SimpleXMLElement('<channel/>');


    for ($i = 0; $i < count($result); $i++) {

        $title = $result[$i]title
        $link = $result[$i]['link'];
        $image = $result[$i]['image'];
    $video = $result[$i]['video'];

        $item = $xml->addChild('item');

        $item->title = $title 
        $item->link = $link
        $item->image = ?? ;
        $item->video = ?? ;       

    }
    Header('Content-type: text/xml');
    print($xml->asXML());

只是不知道如何设置图片和视频,因为标签与媒体不同:图像和视频标签的内容和网址。请让我知道

感谢

1 个答案:

答案 0 :(得分:2)

你做不到。您的XML无效。在您的情况下,带前缀的标签必须具有声明的NameSpace URI&#39; http://search.yahoo.com/mrss/&#39;:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
(...)
</rss>

您可以使用->addChild创建命名空间元素:

$xml = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
<channel/>
</rss>');

(...)

$item = $xml->channel->addChild('item');

$item->title = $title;
$item->link  = $link;

/* Add <media:image>: */
$node = $item->addChild( 'image', Null, 'http://search.yahoo.com/mrss/' );
$node->addAttribute( 'url', $image );

/* Add <media:video>: */
$node = $item->addChild( 'video', Null, 'http://search.yahoo.com/mrss/' );
$node->addAttribute( 'url', $video );

结果:

<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        <item>
            <title>Your Title</title>
            <link>http://www.somelink.it/</link>
            <media:image url="http://www.image.com/"/>
            <media:video url="http://www.video.com/"/>
        </item>
    </channel>
</rss>