Проблема с синтаксическим анализом атрибутов WoWArmory SimpleXML - PullRequest
3 голосов
/ 03 ноября 2010

Это пример элемента:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [displayInfoId] => 62116
            [durability] => 100
            [gem0Id] => 41401
            [gem1Id] => 40123
            [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 "как объект, содержащий все, что я хочу.Помощь

Ответы [ 3 ]

6 голосов
/ 03 ноября 2010

Примерно так:

<?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" и значением с массивом, который фактически имеет атрибуты в виде пар (имя => значение).

2 голосов
/ 03 ноября 2010

Как насчет этого

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

$jsonString = json_encode($jsonArray);

Редактировать: Вы также можете просто использовать

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

, однако я не уверен, возвращаются ли значения атрибутов в виде строк или объектов(редактировать - оказывается, вы не можете. См. решение Артефакто).

1 голос
/ 03 ноября 2010

Как насчет этого?

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