0

我正在尝试使用 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 说它不应该以 结尾/>,而应该只是>。问题是我无法控制它。该部分由以下人员生成:

$pRSS = $dom->createElement('rss');
$pRSS->setAttribute('version', '2.0');
$pRSS->setAttribute('xmlns:g', 'http://base.google.com/ns/1.0');
4

2 回答 2

2

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

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

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

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

于 2010-06-10T19:56:50.100 回答
1

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

于 2010-06-10T19:55:17.817 回答