2017-03-24 6 views
0

私は自分のPHPコードを最小限に単純化しましたが、単純なXMLノードの値を取得できません。私はいくつかの小さな詳細を見落としていないことを確認するためにドキュメントを再読し、私はそれを動作させることができません。PHP SimpleXML - 単一のノード値を取得できません。私は狂っていますか?

var_dump($xmlStrShipping); // So far, so good 
/* Returns: 
SimpleXMLElement Object 
(
[Orders] => SimpleXMLElement Object 
    (
     [Order] => SimpleXMLElement Object 
      (
       [number] => Order number 
       [details] => SimpleXMLElement Object 
        (
        ) 

      ) 

    ) 

) 
*/ 
:その後、私は 詳細にノードの値を取得することはできません

まず、私はこの非常に基本的なXMLに

$xmlStrShipping = simplexml_load_string('<?xml version="1.0" encoding="utf-8" ?> 
    <Shipping> 
     <Orders> 
      <Order> 
       <number>Order number</number> 
       <details></details> 
      </Order> 
     </Orders> 
    </Shipping>'); 

をロードし、私はちょうどのSimpleXMLElementオブジェクトを得続けます

var_dump($xmlStrShipping->Orders[0]->Order->number); // Why is this happening? 
/* Returns 
SimpleXMLElement Object 
(
    [0] => Order number 
) 
*/ 

var_dump($xmlStrShipping->Orders[0]->Order->number[0]); // What?? 
/* Returns 
SimpleXMLElement Object 
(
) 
*/ 

なぜ私はを取得することはできませんか?
なぜ詳細SimpleXMLElementオブジェクト空の文字列の代わりに?

+0

をSimpleXMLElementオブジェクトcast $ test =(string)$ xmlStrShipping-> Orders [0] - > Order-> numberを使用してください。文字列値を取得する –

+0

ドキュメントを見ると、彼らは私と同じように使用しており、SimpleXMLElementを返さず、コードを奇妙に見せるタイプキャストを使用する必要はありません。http:// php.net/simplexml_load_string – NaturalBornCamper

答えて

2

SimpleXMLは、すべてをSimpleXMLElementオブジェクトに変換します。単なる文字列(または何でも)にキャスト:

(string) $xmlStrShipping->Orders[0]->Order->number; 

たり、文字列コンテキストでそれを呼び出す場合のSimpleXMLElementは魔法__toString()メソッド実装しているので、それは同様に動作します:このメソッドの戻り

echo $xmlStrShipping->Orders[0]->Order->number; 
+0

ああ、私は見ることができるので、醜いタイプのキャストを追加する必要がない限り、それが空のときに別の変数に空の文字列としてその文字列を保存する方法はありませんか? :( – NaturalBornCamper

+0

あなたの答えを見た後に型キャストのコメントをチェックしたところ、あなたは正しいです。男はこの問題について警告しました。私はそれを見ることができませんでしたが、私はドキュメントの最初のコメント – NaturalBornCamper

関連する問題