2

を使用して XML 文字列をロードしてsimplexml_load_stringいます。ノードに独自の子ノードがない場合、そのノードの属性は配列に正しくマップされていないようです。これを回避する方法はありますか?CUSTOM_PROPERTY以下のセクションを参照してください。

次の XML があるとします。

<WEBSITE NAME="www.example.co.uk">
    <CATEGORY ID="35702" NAME="CatName" FILE_NAME="" LONG_DESC="" SHORT_DESC="">
        <CUSTOM>
            <CUSTOM_PROPERTY NAME="CATTYPE_INDEX">6</CUSTOM_PROPERTY>
            <CUSTOM_PROPERTY NAME="TEMPLATE_ID">0</CUSTOM_PROPERTY>
            <CUSTOM_PROPERTY NAME="DISPLAY_LIMIT">10</CUSTOM_PROPERTY>
            <CUSTOM_PROPERTY NAME="HIDE_ON_MENU">0</CUSTOM_PROPERTY>
            <CUSTOM_PROPERTY NAME="CAT_COLOUR">#01b2a8</CUSTOM_PROPERTY>
        </CUSTOM>
    </CATEGORY>

次のコードを使用すると:

$Xml = simplexml_load_string($Str);
print_r($Xml);

これを返します:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [NAME] => www.example.co.uk
        )

    [CATEGORY] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [ID] => 35702
                            [NAME] => CatName
                            [FILE_NAME] => 
                            [LONG_DESC] => 
                            [SHORT_DESC] => 
                        )

                    [CUSTOM] => SimpleXMLElement Object
                        (
                            [CUSTOM_PROPERTY] => Array
                                (
                                    [0] => 6
                                    [1] => 0
                                    [2] => 10
                                    [3] => 0
                                    [4] => #01b2a8
                                )

                        )

                )
        )
)

CUSTOM_PROPERTY属性をNAMEマップする必要がありますが、マップされていません。

4

1 に答える 1

4

あなたの属性はそこにありますが、によって表示されませんprint_r()print_r()これは、SimpleXML 構造全体を表示する信頼できる方法ではないことに注意してください。

例:

デモ

$obj = simplexml_load_string($xml);

foreach($obj->CATEGORY->CUSTOM->CUSTOM_PROPERTY as $custom_property)
{
  echo $custom_property->attributes()->NAME . "\n";
}

出力

CATTYPE_INDEX
TEMPLATE_ID
DISPLAY_LIMIT
HIDE_ON_MENU
CAT_COLOUR
于 2013-01-23T09:11:51.427 に答える