XML 文字列をオブジェクト化

Posted by muchag | PHP | 2010-07-29 (木) 18:46:50

外部からの XML データの要求に対して
XML ファイルを保存せずに文字列にしてデータを渡すようにしていたときのこと。

ふと、XML 文字列の中身を表示させる必要が出てきて
print 文を書いたところ、真っ白・・・。
XML 文字列は、そのままでは print できないんだね。 😯

グーグル先生に質問してみると、XML 文字列をオブジェクト化する simplexml_load_string 関数があった。
PHP のお勉強:XML文字列読み込み@PHP
SilverFox2nd~狐の小屋~:XML文字列の読込

simplexml_load_string
object simplexml_load_string ( string $data [, string $class_name = “SimpleXMLElement” [, int $options = 0 [, string $ns [, bool $is_prefix = false ]]]] )

PHP マニュアル:simplexml_load_string

  1. $strXML = <<<XML
  2. <?xml version="1.0" encoding="utf-8" ?>
  3. <root>
  4.     <sport>
  5.         <name>サッカー</name>
  6.         <num>11</num>
  7.         <pro>
  8.             <team>ガンバ大阪</team>
  9.             <team>フロンターレ川崎</team>
  10.         </pro>
  11.     </sport>
  12.     <sport>
  13.         <name>野球</name>
  14.         <num>9</num>
  15.         <pro>
  16.             <team>西部ライオンズ</team>
  17.             <team>阪神タイガース</team>
  18.         </pro>
  19.     </sport>
  20. </root>
  21. XML;
  22.  
  23. $XML = simplexml_load_string($strXML);
  24.  
  25. print '<pre>';
  26. var_dump($XML);
  27. print '</pre>';
  28.  
  29.  
  30. // 以下、出力結果
  31. object(SimpleXMLElement)#5 (1) {
  32.  ["sport"]=>
  33.   array(2) {
  34.     [0]=>
  35.     object(SimpleXMLElement)#3 (3) {
  36.      ["name"]=>
  37.       string(12) "サッカー"
  38.       ["num"]=>
  39.       string(2) "11"
  40.       ["pro"]=>
  41.       object(SimpleXMLElement)#6 (1) {
  42.        ["team"]=>
  43.         array(2) {
  44.           [0]=>
  45.           string(15) "ガンバ大阪"
  46.           [1]=>
  47.           string(24) "フロンターレ川崎"
  48.         }
  49.       }
  50.     }
  51.     [1]=>
  52.     object(SimpleXMLElement)#4 (3) {
  53.      ["name"]=>
  54.       string(6) "野球"
  55.       ["num"]=>
  56.       string(1) "9"
  57.       ["pro"]=>
  58.       object(SimpleXMLElement)#6 (1) {
  59.        ["team"]=>
  60.         array(2) {
  61.           [0]=>
  62.           string(21) "西部ライオンズ"
  63.           [1]=>
  64.           string(21) "阪神タイガース"
  65.         }
  66.       }
  67.     }
  68.   }
  69. }
  1. print $XML->sport[0]->name;
  2.  
  3. // サッカー

このようにオブジェクトとして扱える。
 

E4X

FB4 に触っていて、初めて E4X なるものを知ったが、まだ正確に理解したわけではないので
以下が正しく E4X に則っているのか、そもそも以下を E4X と言っていいのかすらわからない。
Flash Builder 4 -> E4X

まぁ いずれにせよ、属性(プロパティ、attributes)を用いる記述法の場合。

  1. $strXMLE4X = <<<XML
  2. <?xml version="1.0" encoding="utf-8" ?>
  3. <root>
  4.     <sport name="サッカー" num="11">
  5.         <team name="ガンバ大阪" />
  6.         <team name="フロンターレ川崎" />
  7.     </sport>
  8.     <sport name="野球" num="9">
  9.         <team name="西部ライオンズ" />
  10.         <team name="阪神タイガース" />
  11.     </sport>
  12. </root>
  13. XML;
  14.  
  15. $XML = simplexml_load_string($strXMLE4X);
  16.  
  17. print '<pre>';
  18. var_dump($XML);
  19. print '</pre>';
  20.  
  21.  
  22.  
  23. // 以下、出力結果
  24. object(SimpleXMLElement)#5 (1) {
  25.  ["sport"]=>
  26.   array(2) {
  27.     [0]=>
  28.     object(SimpleXMLElement)#3 (2) {
  29.      ["@attributes"]=>
  30.       array(2) {
  31.         ["name"]=>
  32.         string(12) "サッカー"
  33.         ["num"]=>
  34.         string(2) "11"
  35.       }
  36.       ["team"]=>
  37.       array(2) {
  38.         [0]=>
  39.         object(SimpleXMLElement)#6 (1) {
  40.          ["@attributes"]=>
  41.           array(1) {
  42.             ["name"]=>
  43.             string(15) "ガンバ大阪"
  44.           }
  45.         }
  46.         [1]=>
  47.         object(SimpleXMLElement)#7 (1) {
  48.          ["@attributes"]=>
  49.           array(1) {
  50.             ["name"]=>
  51.             string(24) "フロンターレ川崎"
  52.           }
  53.         }
  54.       }
  55.     }
  56.     [1]=>
  57.     object(SimpleXMLElement)#4 (2) {
  58.      ["@attributes"]=>
  59.       array(2) {
  60.         ["name"]=>
  61.         string(6) "野球"
  62.         ["num"]=>
  63.         string(1) "9"
  64.       }
  65.       ["team"]=>
  66.       array(2) {
  67.         [0]=>
  68.         object(SimpleXMLElement)#7 (1) {
  69.          ["@attributes"]=>
  70.           array(1) {
  71.             ["name"]=>
  72.             string(21) "西部ライオンズ"
  73.           }
  74.         }
  75.         [1]=>
  76.         object(SimpleXMLElement)#6 (1) {
  77.          ["@attributes"]=>
  78.           array(1) {
  79.             ["name"]=>
  80.             string(21) "阪神タイガース"
  81.           }
  82.         }
  83.       }
  84.     }
  85.   }
  86. }

ほー! ちゃんと属性として理解してくれるね。

  1. print $XML->sport[0]->@attributes->name;

これはエラーになって、何も表示されない。

まぁ、E4X 自体 AS3 用なんだから、PHP に処理させようっていうのが
根本的に間違いだよね。。。 😆

PHP | 2010-07-29 (木) 18:46:50 |

コメントはまだありません »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment