【发布时间】:2012-12-07 22:07:18
【问题描述】:
我正在用 PHP 中的 SimpleXML 编写一个 Google 产品 RSS 提要。我的产品来自数据库并可以正常创建 RSS 文件,但在命名空间方面遇到了问题。
我在 Google 上搜索过 Stack Overflow,发现了数十篇关于如何解析包含命名空间的 XML 提要的帖子,但我的问题实际上是创作一个带有命名空间的 XML 文件。
这是文件应该的样子:
<?xml version="1.0" encoding="UTF-8" ?>
<rss version ="2.0" xmlns:g="http://base.google.com/ns/1.0">
<!-- content -->
</rss>
这是我的代码:
<?php
$xml = new SimpleXMLElement('<rss></rss>');
$xml->addAttribute('version', '2.0');
$xml->addChild('channel');
$xml->channel->addChild('title', 'Removed');
$xml->channel->addChild('description', 'Removed');
$xml->channel->addChild('link', 'Removed');
foreach ($products as $product) {
$item = $xml->channel->addChild('item');
$item->addChild('title', htmlspecialchars($product['title']));
$item->addChild('description', htmlspecialchars($product['title']));
$item->addChild('link', $product['url']);
$item->addChild('id', $product['product_id']);
$item->addChild('price', $product['price_latest']);
$item->addChild('brand', $product['range']);
$item->addChild('condition', 'new');
$item->addChild('image_link', $product['image']);
}
如何引入g命名空间,既是在根rss元素中声明xmlns,又是作为id、price、brand、condition和@的前缀每个item元素中的987654332@?
【问题讨论】:
-
我强烈建议使用DOM 来代替。 SimpleXML 就是这样 - 简单。你现在所做的已经离开了简单的领域。为此,您需要一个功能齐全的 API。
-
你有我如何使用 DOM 添加命名空间的示例吗?
-
@MartinBean manual for DOMDocument's createElementNS中有一个例子。
标签: php simplexml xml-namespaces