2010-06-10 3 views
0

Я пытаюсь создать RSS-канал Google Merchant с использованием SimpleXML и DOMDocument PHP.Недостаток XML при генерации RSS с помощью PHP DOMDocument

Фактические производящий код выглядит, что:

$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'); 

ответ

2

не должны <rss> быть родительским элементом для всех содержания корма?

Это означает, что вам нужно добавить импортированный XML в $pRSS, а не в родительский документ.

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

Не совсем уверен, что прямо сейчас ли это не будет создавать дополнительный, ненужный узел под <rss>, но это правильное направление, в любом случае.

+0

Вы абсолютно правы. В XML-документе должен быть только один внешний узел - корневой узел. В корневом узле RSS корневой узел является один, в HTML он называется и так далее. –

+0

ах, но, конечно, это имеет смысл. Спасибо –

+0

Хотя у меня все еще есть одна проблема: '$ product-> addChild (" g: condition ", 'new');' генерирует ' новый'. Он пропустил «g:». –

1

Вы должны добавить другие узлы, как дети к $pRSS

+0

+1 более быстрый счет :) –