SimpleXMLElement Access elements with namespace?

后端 未结 2 737
自闭症患者
自闭症患者 2020-12-22 02:31

I have the following XML:


    
                 


        
2条回答
  •  隐瞒了意图╮
    2020-12-22 03:08

    You need to use the ->children() method. If you avoid XPath and just use the SimpleXML operators, your code will end up much simpler.

    Namespaced elements are also one of many things not visible when using standard PHP debug functions to debug the rather magical SimpleXML objects. (The below uses [my simplexml_dump() function instead.)

    $data = new SimpleXMLElement($xml);
    $banner = $data->children('ns1', true)->return; 
    // Or to avoid relying on the 'ns1' alias: ->children('http://endpoint.website.com/', false);
    simplexml_dump($banner);
    

    Note that the 'ns1' namespace remains selected until another ->children() call:

    // Remember to cast to string if you want the content of an element or attribute
    var_dump( (string)$banner->linkName );
    

    If can occur multiple times, this obviously becomes:

    foreach ( $data->children('ns1', true)->return as $banner )
    {
        simplexml_dump($banner);
    }
    

提交回复
热议问题