2010-10-15 1 views
9

Ho un file XML che ha le @attributes etichetta per uno dei nomiCome si usa un simbolo @ nel nome di un oggetto PHP

SimpleXMLElement Object 
(
    [@attributes] => Array 
     (
      [PART_NUMBER] => ABC123 

Voglio fare un riferimento alla presente oggetto come $ product -> @ attributes ['numero_parte'] ma ovviamente il simbolo @ causa un errore.

Quindi, come faccio a fare riferimento a questo oggetto nell'oggetto?

risposta

11

Ebbene, nel caso di SimpleXML, devi chiamare il metodo $product->attributes() come definito nel manual. Ciò fornirà un nome di attributo della mappatura dell'array ai valori.

+0

Grazie per la tua risposta veloce! –

1

Se stai usando oggetti SimpleXML, è già un metodo di attributes integrato in esso (senza il segno @) - usarlo in questo modo: $product->attributes('part_number');

Se stai cercando di creare i propri oggetti di mappare all'XML, quindi, come già scoperto, non è possibile utilizzare il simbolo @ in un nome di variabile PHP (né alcun altro simbolo tranne il carattere di sottolineatura).

Suggerisco semplicemente di utilizzare $product->attributes['part_number'] (ovvero senza il simbolo @) e di mapparlo all'interno della classe.

Se si in realtà è necessario mapparlo nei nomi delle variabili, il meglio che si può davvero sperare sarebbe una sorta di stringa di sostituzione che è possibile scambiare dentro e fuori durante la conversione tra i due formati.

esempio: $product->at__attributes['part_number']

Ma questo non è davvero una buona soluzione particolarmente, IMHO.

2

$product[0]['PART_NUMBER'] dovrebbe funzionare.

Se hai più di un attributo, è necessario utilizzare $product->attributes() in un foreach

attributes in SimpleXML manual

+0

Questa soluzione ha funzionato per me invece quella accettata! –

3

$obj:

stdClass Object 
(
    [@id] => Hello 
    [$] => World! 
) 

Per accedere @id e $:

echo $obj->{'@id'}; 
echo ' '; 
echo $obj->{'$'};