buydadip
buydadip

Reputation: 9417

Loop through an XML object's field values PHP

I have an XML that looks like this...

<fields>
  <field>
    <id>86</id>
    <source>system</source>
    <type>integer</type>
    <name>bounce_count</name>
    <label>Bounce count</label>
    <validation/>
    <store-locally>true</store-locally>
    <display-in-profile>false</display-in-profile>
    <include-in-export>false</include-in-export>
    <lma_display>false</lma_display>
    <newsletters></newsletters>
  </field>
</fields>

I need to loop in through the value of every tag inside <field>. I tried the following (result is the XML), first I got everything within the field tag...

$value = $result->field
$value = simplexml_load_string($value);

If I var_dump() this it looks as so...

object(SimpleXMLElement)#47 (11) { ["id"]=> string(3) "153" ["source"]=> string(6) "client" ["type"]=> string(6) "string" ["name"]=> string(4) "name" ["label"]=> string(4) "Name" ["validation"]=> object(SimpleXMLElement)#48 (0) { } ["store-locally"]=> string(4) "true" ["display-in-profile"]=> string(4) "true" ["include-in-export"]=> string(4) "true" ["lma_display"]=> string(4) "true" ["newsletters"]=> object(SimpleXMLElement)#46 (0) { } }

Next I try looping through the fields inside field

foreach ($value as $single_field) {
    echo $single_field;
}

But I get no output. If I var_dump() $single_field I get the same result as above. I need to loop through the values within each field. So for the XML above I need to store the following values...

86
system
integer
bounce_count
Bounce Count
true
false
false
false

How can I do this?

Upvotes: 1

Views: 317

Answers (1)

Alex Blex
Alex Blex

Reputation: 37048

If you are trying to iterate over children of the element, you need to use SimpleXMLElement::children in your foreach loop:

foreach ($value->children() as $single_field) {
    echo $single_field . "\n";
}

Upvotes: 1

Related Questions