2011-11-08 13 views
0

PHPのsimplexml_load_file関数を使用した後、データを保存するのに問題があります。私はSimpleXML Objectを使いたいと思っています。もしデータがrequiermentsを満たしていれば、それを配列に入れたいと思います。問題は、フィールドの値を得ることができないということです。それが意味を成すなら、オブジェクト全体を常に通り過ぎるようです。PHPのシンプルなXMLの問題

ここに私のコード

echo $allProducts->product[1]->sku."<br/>"; 
echo $allProducts->product[1]->title."<br/>"; 
echo $allProducts->product[1]->price."<br/>"; 
$products["041132"]['sku'] = $allProducts->product[1]->sku; 
$products["041132"]['title'] = $allProducts->product[1]->title; 
$products["041132"]['price'] = $allProducts->product[1]->price; 
print_r($products); 

そして、私の出力:

041132 
Audrey Dining Chair 
195.00 
Array ([041132] => Array ( 
    [sku] => SimpleXMLElement Object ([0] => 041132) 
    [title] => SimpleXMLElement Object ([0] => Audrey Dining Chair) 
    [price] => SimpleXMLElement Object ([0] => 195.00)) 
) 

私が保存したいすべてが実際の値です。それ、どうやったら出来るの?ここでは参考のため

は私のXMLのサンプルです:

<products> 
    <product> 
    <sku>934896</sku> 
    <title>Savannah Barstool</title> 
    <price>475.00</price> 
    </product> 
    <product> 
    <sku>041132</sku> 
    <title>Audrey Dining Chair</title> 
    <price>195.00</price> 
    </product> 
</products> 

答えて

3

のSimpleXMLは常に別のSimpleXMLオブジェクトを返しありません。戻り値を文字列または数値にキャストする必要があります。

例:

$products["041132"]['sku'] = intval($allProducts->product[1]->sku); 
$products["041132"]['title'] = (string)$allProducts->product[1]->title; 
+0

実際には、$ products ["041132"] ['sku'] =(整数)$ allProducts-> product [1] - > sku;のようにキャストできます。 – prodigitalson

+0

また、strvalも使用できます。前述のゼロのためにstrvalをすべて使用することを実際に示唆し、ストリングはそのまま使用すると簡単に整数に変換されます。 :) – mseancole

+0

私は何かをキャストしなければならなかったので、それはしばらくありました。ありがとう! – BFTrick

1

文字列などの要素、例えばキャストしてみてください。

$products["041132"]['title'] = (string)$allProducts->product[1]->title; 

のSimpleXMLのためのPHPマニュアル(see here)によると、」...要素や属性を比較します文字列を必要とする関数に渡す場合は、(string)を使用して文字列にキャストする必要があります。それ以外の場合、PHPはその要素をオブジェクトとして扱います。