3v4l.org

run code in 300+ PHP versions simultaneously
<?php // First of all, I've added <root> element to your XML document, // because otherwise it's invalid. // But it's not important for the rest of the code. // // Also I've added additional <somethingelse> tag to show that filtering is working $xmlString = '<root><details> <name>name1</name> <address>address1</address> </details> <details> <name>name2</name> <mobile>mobileNum</mobile> <address>address2</address> <somethingelse>This will be filtered</somethingelse> </details></root>'; $xml = new SimpleXMLElement($xmlString); //array_flip to get node names as keys for later foreach loop $nodes = array_flip(array ( 'person_name' => 'name', 'mobile_no' => 'mobile', 'address' => 'address', )); $final_data = array(); //Here are all <details> sections' data in array. $node_values = $xml->xpath('//details'); $node_values = json_decode(json_encode((array)$node_values), TRUE); //this loop filters XML data from keys not existing in $nodes, which are the only that you want to keep foreach($node_values as $node) { $final_data[] = array_intersect_key($node, $nodes); } var_dump($final_data);

preferences:
49.91 ms | 402 KiB | 5 Q