0

PHP の simplexml_load_file 関数を使用した後、一部のデータを保存する際に問題が発生しました。SimpleXML オブジェクトを調べたいのですが、データが要件を満たしている場合は、それを配列に入れたいと考えています。問題は、フィールドの値を取得できないことです。それが意味をなす場合、常にオブジェクト全体を通過するようです。

ここに私のコード

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>
4

2 に答える 2

3

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

例:

$products["041132"]['sku'] = intval($allProducts->product[1]->sku); 
$products["041132"]['title'] = (string)$allProducts->product[1]->title; 
于 2011-11-08T22:03:45.530 に答える
1

要素を文字列としてキャストしてみてください。

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

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

于 2011-11-08T22:06:37.917 に答える