使用PHP DOMDocument生成RSS时格式错误的XML

时间:2010-06-10 19:53:16

标签: php xml rss domdocument

我正在尝试使用PHP的SimpleXML和DOMDocument生成Google Merchant RSS Feed。

实际生成代码如下:

$dom = new DOMDocument('1.0', 'utf-8');
$dom->formatOutput = true; 
$pRSS = $dom->createElement('rss');
$pRSS->setAttribute('version', '2.0');
$pRSS->setAttribute('xmlns:g', 'http://base.google.com/ns/1.0');
$dom->appendChild($pRSS);
$domnode = dom_import_simplexml($xml); 
$domnode = $dom->importNode($domnode, true); 
$domnode = $dom->appendChild($domnode);

$dom->save('googleproductfeed.xml');

($ xml包含所有数据,但与我的问题无关)

这一切都很好,但是这里有一个XML错误:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2" xmlns:g="http://base.google.com/ns/1.0"/>

根据Google Merchant,Google Chrome和validome.org,第二行出错。 更准确地说,Validome说它不应该以{{1​​}}结尾,而只是/>。 问题是我无法控制。该部分由以下人员生成:

>

2 个答案:

答案 0 :(得分:2)

<rss>不应该是Feed的所有内容的父元素吗?

这意味着您需要将导入的XML附加到$pRSS,而不是父文档。

$domnode = dom_import_simplexml($xml); 
$domnode = $dom->importNode($domnode, true); 
$domnode = $pRSS->appendChild($domnode);  // Change here

现在还不完全确定这是否会在<rss>下创建一个额外的,不必要的节点,但无论如何它都是正确的方向。

答案 1 :(得分:1)

您应该将其他节点作为子节点添加到$pRSS