2010-11-03 4 views
3

Ceci est un élément exemple:Problème avec SimpleXML Parsing WoWArmory attribue

SimpleXMLElement Object 
(
    [@attributes] => Array 
     (
      [displayInfoId] => 62116 
      [durability] => 100 
      [gem0Id] => 41401 
      [gem1Id] => 4
      [gem2Id] => 0 
      [gemIcon0] => inv_jewelcrafting_shadowspirit_02 
      [gemIcon1] => inv_jewelcrafting_gem_37 
      [icon] => inv_helmet_98 
      [id] => 48592 
      [level] => 245 
      [maxDurability] => 100 
      [name] => Liadrin's Headpiece of Triumph 
      [permanentEnchantIcon] => ability_warrior_shieldmastery 
      [permanentEnchantItemId] => 44876 
      [permanentenchant] => 3819 
      [pickUp] => PickUpLargeChain 
      [putDown] => PutDownLArgeChain 
      [randomPropertiesId] => 0 
      [rarity] => 4 
      [seed] => 0 
      [slot] => 0 
     ) 

) 

J'essaie d'obtenir un objet JSON avec chaque élément, mais il y a environ 17 ou quelque chose, et si j'essaie de json_encode() cela donne moi "@attributes" comme un objet contenant tout ce que je veux. Aidez-moi?

+0

désolé je suis un peu confus, si c'est le code php, où sont les virgules pour séparer les paires de clé-valeur? et le point-virgule terminateur? Où est-ce que tu as eu çà? –

+0

@Michael Ressemble à un 'print_r' de l'objet SimpleXML – Phil

+0

Oui, j'essaie d'obtenir un objet JSON à partir d'un objet SimpleXML. –

Répondre

2

Que diriez-vous de cette

$jsonArray = array(); 
foreach ($xmlObj->attributes() as $attr => $value) { 
    $jsonArray[$attr] = (string)$value; 
} 

$jsonString = json_encode($jsonArray); 

Edit: Vous pouvez également être en mesure d'utiliser simplement

$jsonString = json_encode($xmlObj->attributes()); 

mais je ne suis pas sûr si les valeurs d'attribut sont retournées sous forme de chaînes ou d'objets (modifier - il s'avère que vous ne pouvez pas voir la solution d'Artefacto).

+0

Votre solution d'édition ne fonctionne pas; vois ma réponse. – Artefacto

1

Que pensez-vous de cela?

$array = (array)$simplexml->node->attributes(); 
$jsonArray = json_encode($array['@attributes']); 
6

Quelque chose comme ceci:

<?php 
$sxm = new SimpleXMLElement("<a name=\"kkk\" other=\"foo\"/>"); 
$attrs = $sxm->attributes(); 
var_dump(json_encode(reset($attrs))); 

donne:

 
string(28) "{"name":"kkk","other":"foo"}" 

Le problème que vous rencontrez est parce que $xmlObj->attributes() retourne un SimpleXMLElement qui, lorsqu'elle est convertie en un tableau, est un tableau la clé "@attributes" et une valeur avec un tableau qui a réellement les attributs en tant que paires (name => value).

+0

+1 Mais l'appel 'attributes()' n'est pas nécessaire. Vous pouvez utiliser 'reset()' sur l'élément directement. Cela dit, il peut être plus sûr de l'utiliser pour s'assurer que les attributs sont le premier élément du tableau. –

+0

'reset' ne fonctionnera pas sur l'objet (qui est ce que' $ sxm' est ou '$ sxm-> attributes()' renvoie). Vous devez d'abord le lancer dans un tableau. Je crois que c'est un comportement qui a changé en 5.3. – netcoder

+0

@netcoder Probablement j'ai 5.3 ici. –