2010-06-10 6 views
0

J'essaie de générer un flux RSS Google Merchant, en utilisant PHP SimpleXML et DOMDocument.XML mal formé lors de la génération de RSS avec PHP DOMDocument

Le code de production réelle va comme ça:

$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 $ a toutes les données, mais ce n'est pas pertinent à mon problème)

Tout est généré bien, mais il y a un XML erreur ici:

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

Selon Google Merchant, Google Chrome et validome.org, il y a une erreur dans la deuxième ligne. Plus précisément, Validome dit qu'il ne devrait pas se terminer par />, mais seulement >. Le problème est que je n'ai aucun contrôle sur cela. Cette partie a été générée par:

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

Répondre

2

Ne devrait pas <rss> être l'élément parent à tout le contenu de l'alimentation? Cela signifie que vous devez ajouter le code XML importé à $pRSS, et non le document parent.

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

Pas tout à fait sûr en ce moment si cela ne crée pas un nœud supplémentaire, inutile sous <rss>, mais il est la bonne direction dans tous les cas.

+0

Vous avez absolument raison. Il ne devrait y avoir qu'un seul nœud le plus externe dans un document XML, le nœud racine. Dans un flux RSS, le nœud racine est le , dans un HTML, il s'appelle et ainsi de suite. –

+0

ah mais bien sûr cela a du sens. Merci –

+0

Bien que j'ai toujours un problème: '$ product-> addChild (" g: condition "," nouveau ");' génère ' nouveau'. Il a sauté le "g:". –

1

Vous devez ajouter d'autres noeuds que les enfants à $pRSS

+0

+ 1 étant plus rapide compte :) –

Questions connexes