2010-12-01 10 views

答えて

12

これはSimpleXMLElementオブジェクトです。 '@attributes'行は、XML要素のattributesの内部表現です。 SimpleXMLの関数を使用して、直接このオブジェクトと対話するのではなく、このオブジェクトからデータを取得します。

+0

しかし、なぜそれが@記号で示されていますか? – cambraca

+0

なぜか分からない。 SimpleXMLは配列要素に名前を付けることにしました。 –

+0

@Rocket変数名に@を含める方法が見つかりません – cambraca

9

これらのエラー制御に関するすべての回答が正しくありません。 @は何でもを意味するものではありません。プロパティは内部的に呼び出されますが、はこれに依存しません。 SimpleXMLを扱うときにprint_r()またはvar_dump()に頼らないでください。 SimpleXMLは、print_r()var_dump()で正しく表現されていない多くの「魔法のような」ことをします。

XMLフラグメントの「内部」の内容を知る必要がある場合は、->asXML()を使用してください。

+0

ええ、それはSimpleXMLElementオブジェクトが奇妙だと思われます。 –

+0

これも正しい答えでしたが、私は2を与えることはできません:( –

+0

受け入れられた答えを変更したいときはいつでも以前の選択を解除することができます。彼らはそれらを削除し、それらのランダムな答えが間違っていたことが判明した後に編集するだけです。 –

1

申し訳ありませんが、ゲストとしてコメントすることはできませんが、私のようにここで終わる他の人のために...私は自分のJoomlaフォームフィールドを作成しており、Joomlaはあらゆる種類の非常に興味深いオブジェクトを作成します。さて、私はSimpleXMLのエキスパートになりたくはありませんでした。私が望むのは、@attributesの中で悩まされていたオリジナルのラベルテキストでした。

"hmmm, I wonder if this works?"™のビットの後、私は、これは、これらの値にアクセスする最も簡単な方法ですが見つかりました:

var_dump($simpleXMLObject); 

/* Result */ 
object(SimpleXMLElement) 
    public '@attributes' => 
    array (size=3) 
     'name' => string 'awesome' 
     'label' => string 'Awesome Label' 
     'type' => string 'typeOfAwesome' 

echo $simpleXMLObject->attributes()->label; // Awesome Label 

$simpleXMLObject->attributes()->label = 'Different Day, Different Awesome'; 
echo $simpleXMLObject->attributes()->label; // Different Day, Different Awesome 

彼らが横たわっていませんでした。それは本当に簡単です。

0

私はuser3098738にコメントするのに十分な担当者がいませんが、彼の反応を検証したいと考えていました。それは本当に簡単です。あなたはSimpleXMLの中@attributesにして実行し、任意の時間が...私は唯一のXML形式のデータを提供しますHTTP APIで働いています

$simpleXMLObject->attributes() 
$simpleXMLObject->key->attributes() 
0

を使用しています。最初にSimpleXMLにロードし、@attributesの問題に困惑しました。それには貴重なデータがどのように含まれていますか? print_r()私は混乱しています。

私のソリューションは、foreachので配列とSimpleXMLオブジェクトを通じて0ループで変数イテレータを作成し、attribues()メソッドでデータを取得し、私の作成した配列にロードにしました。 foreachループが終了する前に繰り返します。はるかに使用可能な通常の配列へ

SimpleXMLElement Object 
(
    [@attributes] => Array 
     (
      [ID] => 1 
      [First] => John 
      [Last] => Smith 
     ) 
) 

そうしますprint_r()がこれを示してから行ってきました。これは、必要に応じて配列をjsonに素早く変換するオプションが必要だったのですばらしいです。コード内

私のソリューション:

$obj = simplexml_load_string($apiXmlData); 
$fugly = $obj->Deeply->Nested->XML->Data->Names; 
$people = array(); 
$i = 0; 
foreach($fugly as $val) 
{ 
    $people[$i]['id'] += $val->attributes()->ID; 
    $people[$i]['first'] = "". $val->attributes()->First; 
    $people[$i]['last'] = "". $val->attributes()->Last; 
    $i++; 
} 

クイックノートがPHPのSETTYPE()関数だろうが奇妙/バギーですので、私はIDが整数であることを確認するために+を追加し、を追加しましたを引用して名前がの文字列であることを確認してください。ある種の変数の変換がない場合は、作成した配列にSimpleXMLオブジェクトをロードします。しますprint_r()の

最終結果:

Array 
(
    [0] => Array 
    (
     [id] => 1 
     [first] => John 
     [last] => Smith 
    ) 

    [1] => Array 
    (
     [id] => 2 
     [first] => Jane 
     [last] => Doe 
    ) 
) 
+0

属性を読み取るには、 'name-> attribute'の代わりに配列のような構文を使用する必要があります。' name ['attribute'] ' – Soaku