Sto scrivendo un feed RSS di prodotti Google con SimpleXML in PHP. I miei prodotti provengono dal database e creano il file RSS bene, ma ho problemi quando si tratta di spazi dei nomi.Come utilizzare gli spazi dei nomi durante la scrittura di file XML con SimpleXML
Ho cercato su Google e ricerca Stack Overflow e ho trovato decine di post su come analizzare feed XML contenenti spazi dei nomi, ma il mio problema è in realtà authoring un file XML con uno spazio dei nomi.
Ecco ciò che il file dovrebbe simile:
<?xml version="1.0" encoding="UTF-8" ?>
<rss version ="2.0" xmlns:g="http://base.google.com/ns/1.0">
<!-- content -->
</rss>
E qui è il mio codice:
<?php
$xml = new SimpleXMLElement('<rss></rss>');
$xml->addAttribute('version', '2.0');
$xml->addChild('channel');
$xml->channel->addChild('title', 'Removed');
$xml->channel->addChild('description', 'Removed');
$xml->channel->addChild('link', 'Removed');
foreach ($products as $product) {
$item = $xml->channel->addChild('item');
$item->addChild('title', htmlspecialchars($product['title']));
$item->addChild('description', htmlspecialchars($product['title']));
$item->addChild('link', $product['url']);
$item->addChild('id', $product['product_id']);
$item->addChild('price', $product['price_latest']);
$item->addChild('brand', $product['range']);
$item->addChild('condition', 'new');
$item->addChild('image_link', $product['image']);
}
Come introdurre lo spazio dei nomi g
, sia la dichiarazione xmlns
nella radice rss
elemento, quindi come prefisso per id
, price
, brand
, condition
e image_link
in ogni elemento item
?
Mi consiglia di utilizzare [DOM] (http://php.net/manual/en/book .dom.php) per questo invece. SimpleXML è proprio questo - * semplice *. Quello che stai facendo ora ha lasciato il regno della semplicità. Hai bisogno di un'API completa per questo. – DaveRandom
Hai un esempio di come aggiungerei un namespace con DOM? –
@MartinBean C'è un esempio in [manuale per createElementNS di DOMDocument] (http://php.net/manual/domdocument.createelementns.php). – Furgas