代码之家  ›  专栏  ›  技术社区  ›  Carson Myers

从SimpleXmlElement对象获取项

  •  1
  • Carson Myers  · 技术社区  · 15 年前

    据我所知,simplexmleelement只是其他simplexmleelements的数组,如果另一个标记中没有嵌套的标记,则加上一些常规数组值。

    变量中有simplexmlement $data var_dump($data) 给我这个:

    object(SimpleXMLElement)#1 (33) {
      ["buyer-accepts-marketing"]=>
      string(4) "true"
    ...
    ...
    

    但呼唤 var_dump($data->buyer-accepts-marketing) 给我一个错误,和 var_dump($data["buyer-accepts-marketing"]) 给我零。打电话 var_dump($data->shipping-address->children()) 给我一个错误。

    就像这样:

    foreach($data as $item) {
        var_dump($item);
    }
    

    给出了一大堆simplexmlement对象,但奇怪的是,没有字符串或int。

    我这里缺什么?我想把它的特定部分传递给一个函数,例如,我不必去

    $data->billing-address->postal-code;
    
    ...
    
    $data->shipping-address->postal-code;
    
    ...
    

    可以去

    address($data->billing-address);
    address($data->shipping-address);
    

    等。

    1 回复  |  直到 15 年前
        1
  •  6
  •   Mike    15 年前

    simplexmlement是 只是一个数组。要访问子元素,必须使用对象表示法( $a->b )要访问属性,必须使用数组表示法( $a['b'] )

    问题是,对于对象表示法,有效的标记名可能是非法的PHP代码。

    你需要这样做:

    $data->{'buyer-accepts-marketing'};
    

    注意,这将返回simplexmleelement!原因是它可以只包含文本、更多子元素,或者两者都包含。产量 var_dump() 对于simplexmlElements是非常误导的。如果你想要一个单一的文本内容 <buyer-accepts-marketing> 标签,你必须这样做:

    (string)$data->{'buyer-accepts-marketing'};
    

    当然,这样做也是完全合法的:

    (int)$data->{'buyer-accepts-marketing'};
    

    在某些情况下(例如 echo simplexmlement)是指类型转换是隐式的和自动的。你不能 回声 对象,因此PHP会自动将其转换为字符串。

    我和simplexml有着爱/恨的关系。它使事情变得非常 容易的 只有在你明白 复杂的 实际的API是。

    读一下所谓的 basic “能很好地处理它的例子。