Skip to content
Advertisement

SimpleXML looping through

I get product data via xml like that

    <?xml version='1.0' encoding='UTF-8'?>
    <brands>
        <brand>
            <name>Spielberger Mühle</name>
            <kuerzel>SPI</kuerzel>
            <id>e3124594-1d4c-4a72-8c66-37de394fece2</id>
            <last_modified>27.04.2021 23:00:03</last_modified>
            <logo>
                <id>e3124594-1d4c-4a72-8c66-37de394fece2</id>
                <name>SPI_Spielberger Mühle_e3124594-1d4c-4a72-8c66-37de394fece2.jpg</name>
                <size>273981</size>
                <mime_type>image/jpeg</mime_type>
                <img_width>1533</img_width>
                <img_height>676</img_height>
                <last_modified>13.12.2016 12:48:02</last_modified>
            </logo>
            <url>www.spielberger-muehle.de</url>
            <adr_invb_name>Spielberger GmbH</adr_invb_name>
            <adr_invb_strasse>Burgermühle</adr_invb_strasse>
            <adr_invb_plz>74336</adr_invb_plz>
            <adr_invb_ort>Brackenheim</adr_invb_ort>
            <adr_invb_land_id>8</adr_invb_land_id>
        </brand>
    </brands>
    <producers>
        <producer>
 ....

and in my php (shortened to the relevant parts)

    $xml = simplexml_load_file('demo.xml');

    foreach ($xml->brands->brand as $key => $value) {

        print "Key: $key - Value: $valuen";

    }

If I try to loop through the brand the following happens

 Key: brand - Value: 

edited because I figured I was way to verbose.

Advertisement

Answer

The reason this is happening is because of how SimpleXMLElement handles it’s iterator. You can iterate through the element using the get_object_vars function.

foreach (get_object_vars($xml) as $key => $value) {
    print "Key: $key - Value: $valuen";
}
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement