0

次の simpleXML 出力があります。

SimpleXMLElement Object
(
    [@attributes] => Array
    (
        [version] => 2
    )
    [currentTime] => 2013-02-05 21:26:09
    [result] => SimpleXMLElement Object
    (
        [rowset] => SimpleXMLElement Object
        (
            [@attributes] => Array
            (
                [name] => characters
                [key] => characterID
                [columns] => name,characterID,corporationName,corporationID
            )
            [row] => Array
            (
                [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                    (
                        [name] => Wrytha Cy
                        [characterID] => 209668693
                        [corporationName] => Deep Core Mining Inc.
                        [corporationID] => 1000006
                    )
                )
                [1] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                    (
                        [name] => Eve Mae
                        [characterID] => 624980803
                        [corporationName] => Viziam
                        [corporationID] => 1000066
                    )
                )
                [2] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                    (
                        [name] => Wrytha
                        [characterID] => 709227913
                        [corporationName] => The Flying Tigers
                        [corporationID] => 669350666
                    )
                )
            )
        )
    )
    [cachedUntil] => 2013-02-05 21:35:04
)

PHPループをループして、「名前」と「キャラクターID」を取得したいと思います。次のようなことを試しました:

    $simpleXML = simplexml_load_string($xml); 

    foreach ($simpleXML->result->rowset->row as $row) {
        print_r($row);
        $name = $row['@attributes']['name'];
        echo $name.'<br>';
    }

$name が設定されていません。それは単純なものになるでしょう。急いでそれを見ていないだけで、simpleXMLを初めて使用します。

4

1 に答える 1

0

属性は構文を使用してアクセスされる$element['attribute_name']ため、この場合はが必要$row['name']です。

SimpleXMLオブジェクトは一種の魔法$element->child$element_list[0]あり、$element['foo']構文は通常のPHPロジックをオーバーロードして有用であることを覚えておくことが重要です。同様に(string)$element、要素の完全なテキストコンテンツが提供されますが、実際のXMLでは分割されます。

そのため、print_r出力ではオブジェクトの「実際の」ビューが得られないため、注意して使用する必要があります。私がここで書いたいくつかの代替デバッグ関数があり、オブジェクトがどのように動作するかについてより正確なアイデアを提供します。

于 2013-02-07T13:18:50.193 に答える