2015-12-04 6 views
6

Sto cercando di generare un feed RSS con PHP SimpleXMLElement, il problema è che ho bisogno di anteporre gli elementi e non riesco a trovare un modo per farlo utilizzando la classe SimpleXMLElement .Come generare namespace prefisso elementi XML che utilizzano SimpleXMLElement in PHP

Ho provato a utilizzare $item->addChild('prefix:element', 'value') ma nel risultato xml si spoglia il prefisso, qualche idea del perché questo accada?.

mi chiedo se c'è un modo per risolvere questo utilizzando l'altra pulitore modo SimpleXMLElement o qualsiasi di un semplice eco l'XML.

Per chiarimenti, questo è il mio codice PHP:

$xml = new SimpleXMLElement('<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0"/>'); 
    $channel = $xml->addChild('channel'); 
    $channel->addChild('title', 'Text'); 
    $channel->addChild('link', 'http://example.com'); 
    $channel->addChild('description', 'An example item from the feed.'); 

    foreach($this->products as $product) { 
     $item = $channel->addChild('item'); 

     foreach($product as $key => $value) 
      $item->addChild($key, $value); 
    } 

    return $xml->asXML(); 

E questo è l'esempio XML sto cercando di generare:

<?xml version="1.0"?> 
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0"> 
<channel> 
    <title>Test Store</title> 
    <link>http://www.example.com</link> 
    <description>An example item from the feed</description> 

    <item> 
     <g:id>DB_1</g:id> 
     <g:title>Dog Bowl In Blue</g:title> 
     <g:description>Solid plastic Dog Bowl in marine blue color</g:description> 
     ... 
    </item> 
... 

Grazie in anticipo

risposta

2

È necessario passare lo spazio dei nomi uri del prefisso per aggiungere elemento figlio con prefisso:

$item->addChild($key, $value, 'http://base.google.com/ns/1.0'); 

eval.in demo:

$xml = new SimpleXMLElement('<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0"/>'); 
$channel = $xml->addChild('channel'); 
$channel->addChild('title', 'Text'); 
$channel->addChild('link', 'http://example.com'); 
$channel->addChild('description', 'An example item from the feed.'); 

$item = $channel->addChild('item'); 
$item->addChild('g:foo', 'bar', 'http://base.google.com/ns/1.0'); 

print $xml->asXML(); 
Problemi correlati