2010-07-09 6 views
1

Je reçois l'erreur suivante lorsque vous essayez d'ajouter des données de myXml.xml à une chaîne: parse error: erreur de syntaxe, T_OBJECT_OPERATOR inattendue.Parse error: syntax error, T_OBJECT_OPERATOR inattendue

$xmlstr = file_get_contents('myXml.xml'); 
    $xml = new SimpleXMLElement($xmlstr); 

    foreach($xml->order as $order){ 
      $replace = array(); 
      $firstName = (string) $order->billing-address->first-name; 
      $lastName = (string) $order->billing-address->last-name; 
    } 

Je ne peux pas fournir mon XML directement car il contient des données sensibles.

Merci, Sam

Répondre

12

Le signe - signifie soustraction. Pour l'utiliser dans les noms de propriété, vous devez utiliser cette syntaxe:

$firstName = (string) $order->{"billing-address"}->{"first-name"}; 
$lastName = (string) $order->{"billing-address"}->{"last-name"}; 

En général, il est probablement préférable d'utiliser firstName, billingAddress, etc. comme les noms de propriétés pour éviter cela. Voir CamelCase. Dans ce cas, cependant, vous n'avez aucun contrôle sur l'entrée XML.

+3

La façon dont votre @ Sam code est maintenant, PHP comprend: 'order- $> facturation - Adresse-> premier - nom, adresse et nom' sont considérés comme des constantes à cet effet. Mais vous n'avez pas défini ces constantes, donc PHP pense que vous voulez dire les chaînes "adresse" et "nom" et essayez d'utiliser le [T_OBJECT_OPERATOR] (http://php.net/manual/en/tokens.php), par exemple. '->' sur une chaîne ne fonctionne pas. – Gordon

+0

Génial, merci à vous deux pour nos réponses. Vous avez raison de ne pas avoir le contrôle sur le XML. Je vais essayer maintenant. Edit: A travaillé parfaitement, merci! – Sam

Questions connexes