2010-11-03 81 views
3

這是一個例子項目:問題的SimpleXML解析WoWArmory屬性

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 
     ) 

) 

我試圖讓每個項目一個JSON對象,但有大約17什麼的,如果我嘗試json_encode()它給我「@attributes」作爲包含我想要的所有東西的對象。幫幫我?

+0

對不起,我有點困惑,如果這是php代碼,那麼逗號分隔鍵 - 值對的地方在哪裏?和終結者分號?你從哪裏得到這個? – 2010-11-03 00:11:56

+0

@Michael看起來像SimpleXML對象的'print_r' – Phil 2010-11-03 00:13:14

+0

是的,我試圖從SimpleXML對象獲取JSON對象。 – 2010-11-03 00:14:40

回答

2

這個怎麼樣

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

$jsonString = json_encode($jsonArray); 

編輯:您可能還可以簡單地使用

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

但是我不知道如果屬性值作爲字符串或對象(編輯返回 - 事實證明你不能,看到Artefacto的解決方案)。

+0

您的編輯解決方案不起作用;看到我的答案。 – Artefacto 2010-11-03 00:24:47

1

這個怎麼樣?

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

事情是這樣的:

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

給出:

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

您所遇到的問題是,因爲$xmlObj->attributes()返回SimpleXMLElement,當轉換爲一個數組,是一個數組關鍵字「@attributes」和一個實際上具有屬性(name => value)對的數組的值。

+0

+1但是不需要'attributes()'調用。你可以直接在元素上使用'reset()'。也就是說,使用它可以更安全*確保屬性是數組中的第一個元素。 – 2010-11-03 00:29:47

+0

'reset'在對象上不起作用(這是'$ sxm'或'$ sxm-> attributes()'返回的)。您必須首先將其轉換爲數組。我相信這是5.3中改變的行爲。 – netcoder 2010-11-03 00:34:15

+0

@netcoder也許我在這裏有5.3。 – 2010-11-03 00:37:15