【问题标题】:Trouble with PHP Simple XMLPHP 简单 XML 的问题
【发布时间】:2011-11-08 22:01:11
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    示例:

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

    【讨论】:

    • 或者你实际上可以像$products["041132"]['sku'] = (integer) $allProducts-&gt;product[1]-&gt;sku; 那样投射它,这更快,我个人偏好:-)
    • 或者你也可以使用 strval。实际上会建议对所有人使用 strval,因为前面的零和字符串很容易转换为整数,如果这样使用的话。 :)
    • 我已经有一段时间没有投任何东西了。谢谢!
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多