2010-01-20 16 views
5

Evening guys.PHP namespace simplexml problems

In primo luogo per dire, ho letto How do I parse XML containing custom namespaces using SimpleXML?.

Sto analizzando un documento XML da una fonte non mente, e usano uno spazio dei nomi personalizzato.

<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0" xmlns:moshtix="http://www.moshtix.com.au"> 
    <channel> 
    <item> 
    <link>qweqwe</link> 
    <moshtix:genre>asdasd</moshtix:genre> 
... 

Ad esempio. Quando analizzo utilizzando SimpleXML, nessuno dei mostix: elementi dello spazio dei nomi sono visibili o accessibili. Probabilmente una soluzione davvero semplice, ma qualche idea ragazzi?

risposta

6

Di solito, le persone usano children().

$rss = simplexml_load_string(
    '<?xml version="1.0" encoding="utf-8"?> 
    <rss version="2.0" xmlns:moshtix="http://www.moshtix.com.au"> 
     <channel> 
      <link>qweqwe</link> 
      <moshtix:genre>asdasd</moshtix:genre> 
     </channel> 
    </rss>' 
); 

foreach ($rss->channel as $channel) 
{ 
    echo 'link: ', $channel->link, "\n"; 
    echo 'genre: ', $channel->children('moshtix', true)->genre, "\n"; 
} 
+0

Mentre che funziona per l'estratto ogni elemento, che è utile, un bel po 'di tempo ho bisogno per eseguire un json_encode e semplicemente impacchettare ogni singolo elemento valido e memorizzarli in un database. Ma quando lo faccio, non riconosce gli elementi dello spazio dei nomi personalizzati. Qualche idea? I dati all'interno di ogni variano troppo per inserirli manualmente. – James

+0

Gestito per risolvere il problema con alcune scansioni di foreach attraverso ogni elemento;) – James

+1

Mi disturba sempre quando le persone dicono che stanno convertendo XML in JSON senza preoccuparsi della struttura. Perché non memorizzarlo come, beh, XML? – IMSoP