-2

My XML looks like this

<root lastUpdated="20180101120330" ttl="24">
<Parent1>...</Parent1>
<Parent2>
<sub parm1="google.com" parm2="email@email.com" parm3="5343243434" parm4="google" parm5="876787" parm6="" parm7="ACTIVE">...</sub>
<sub parm1="yahoo.com" parm2="email2@email.com" parm3="4434343" parm4="yahoo" parm5="232322" parm6="" parm7="ACTIVE">...</sub>
<sub parm1="facebook.com" parm2="email3@email.com" parm3="222334" parm4="facebook" parm5="12233" parm6="" parm7="ACTIVE">...</sub>
</Parent2>
</root>

I want to look for parm3 and if it matches it should return parm1. XML is stored in local directory.

Dineshh Bhardwaj
  • 75
  • 1
  • 3
  • 13

1 Answers1

2

You could use SimpleXMLElement and use an xpath query like /root/Parent2/sub for the <sub> items in <Parent2>.

Or for example /root/*[starts-with(name(),'Parent')]/sub for the <sub> elements in the <Parent...> elements.

You could then make your comparison using the attributes.

$data = <<<DATA
<root lastUpdated="20180101120330" ttl="24">
    <Parent1></Parent1>
    <Parent2>
        <sub parm1="google.com" parm2="email@email.com" parm3="5343243434" parm4="google" parm5="876787" parm6="" parm7="ACTIVE">...</sub>
        <sub parm1="yahoo.com" parm2="email2@email.com" parm3="4434343" parm4="yahoo" parm5="232322" parm6="" parm7="ACTIVE">...</sub>
        <sub parm1="facebook.com" parm2="email3@email.com" parm3="222334" parm4="facebook" parm5="12233" parm6="" parm7="ACTIVE">...</sub>
    </Parent2>
</root>
DATA;


$elm= new SimpleXMLElement($data);
$a = $elm->xpath('/root/Parent2/sub');

for ($i = 0; $i < count($a); $i++) {
    if ((string)$a[$i]->attributes()->parm3 === "4434343") {
        echo $a[$i]->attributes()->parm1;
    }
}

Output 1 Output 2

The fourth bird
  • 154,723
  • 16
  • 55
  • 70