PHP Simple XML问题

时间:2011-11-08 22:01:11

标签: php xml pass-by-reference xml-simple

使用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>

2 个答案:

答案 0 :(得分:3)

SimpleXML总是返回另一个SimpleXML对象。您需要将返回值强制转换为字符串或数字。

示例:

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

答案 1 :(得分:1)

尝试将元素转换为字符串,例如:

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

根据SimpleXML(see here)的PHP手册,“...将元素或属性与字符串进行比较或将其传递给需要字符串的函数,您必须使用它将其强制转换为字符串(字符串)。否则,PHP将元素视为对象。“