Искаженный XML при генерации RSS с PHP DOMDocument - PullRequest
0 голосов
/ 10 июня 2010

Я пытаюсь сгенерировать RSS-канал Google Merchant, используя PHP SimpleXML и 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,во второй строке есть ошибка.Точнее, Валидом говорит, что он должен заканчиваться не />, а просто >.Проблема в том, что я не могу это контролировать.Эта часть была сгенерирована:

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

Ответы [ 2 ]

2 голосов
/ 10 июня 2010

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

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

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

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

1 голос
/ 10 июня 2010

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

...