- var_dump: documentation ( source)
- array_intersect_key: documentation ( source)
- json_decode: documentation ( source)
- array_flip: documentation ( source)
- json_encode: documentation ( source)
<?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);