Search code examples
phpxmldomsimplexml

How to print name/value of xml elements and it childs using php SimpleXML?


I have XML:

<?xml version="1.0" encoding="utf-8" ?>
<bikes>
<bike>
    <model>First</model>
    <speedNumber>4</speedNumber>
    <sizes>100</sizes>
    <amount>100</amount>
</bike>
<bike>
    <model>Second</model>
    <speedNumber>3</speedNumber>
    <sizes>300</sizes>
    <amount>150</amount>
</bike>
<bike>
    <model>Third</model>
    <speedNumber>4</speedNumber>
    <sizes>300</sizes>
    <amount>300</amount>
</bike>
</bikes>

I read it using SimpleXML. How can I print info for all tags such as

bike: model=First , speedNumber=4 ..

My code:

$xml=simplexml_load_file("bike.xml") or die('Cannot load file');
foreach($xml->children() as $bikes) {
    echo $bikes->getName()." : ";
    echo $bikes->model . " ";
    echo $bikes->speedNumber . " ";
    echo $bikes->sizes . "";
    echo $bikes->amount . "<br>";
}

Now I print bike:

First 4 100 100 bike: Second 3 300 150 

How can I print

bike: model=First speedNumber=4 ...

Solution

  • Select childs of $bikes using $bikes->children() and loop through them. In foreach loop, generate target string.

    foreach ($xml->children() as $bikes) {
        echo $bikes->getName()." : ";
        foreach ($bikes->children() as $childs){
            echo $childs->getName()."=".$childs ." ";
        }   
        echo "<br>";
    }
    

    See result in demo