Je dois analyser les données du fichier XML en CSV en utilisant PHP. J'ai écrit le code en PHP, il obtient seulement quelques détails et il n'extrait pas les détails du noeud s'il a des enfants. Je suis en train de tester avec une plus petite partie de XML, le fichier d'origine a une très grande quantité de données autour de 20.000 nœuds personnes. Voici mes données XML -> list.xml.Ne pas obtenir toutes les données des nœuds lors de l'analyse de XML en CSV en utilisant PHP
<persons>
<person>
<id>326324</id>
<lastName>ABC</lastName>
<firstName>XYZ</firstName>
<middleName>PQR</middleName>
<preferredfirstName></preferredfirstName>
<details>
<JobTitle>Engineer</JobTitle>
<Dept>Healthcare</Dept>
<emp_position_no>PT0970</emp_position_no>
<emp_class_code>AJ</emp_class_code>
<emp_class_desc>Developer</emp_class_desc>
<emp_rank></emp_rank>
<CA_AddrStreet></CA_AddrStreet>
<CA_AddrCity></CA_AddrCity>
<CA_AddrState></CA_AddrState>
<CA_AddrZip></CA_AddrZip>
<CA_Phone></CA_Phone>
<EmployeeEmail>[email protected]</EmployeeEmail>
</details>
<Projects>
<subj_crse>MKTG 311</subj_crse>
<subj_crse>MKTG 428</subj_crse>
</Projects>
</person>
<person>
<id>956197</id>
<lastName>YTRG</lastName>
<firstName>WDES</firstName>
<middleName>BVCX</middleName>
<preferredfirstName></preferredfirstName>
<details>
<JobTitle>TECHNICIAN</JobTitle>
<Dept>Education</Dept>
<emp_position_no>PT1010</emp_position_no>
<emp_class_code>AJ</emp_class_code>
<emp_class_desc>Technician</emp_class_desc>
<emp_rank></emp_rank>
<CA_AddrStreet></CA_AddrStreet>
<CA_AddrCity></CA_AddrCity>
<CA_AddrState></CA_AddrState>
<CA_AddrZip></CA_AddrZip>
<CA_Phone></CA_Phone>
<EmployeeEmail>[email protected]</EmployeeEmail>
</details>
<Projects>
<subj_crse>TCHCS 321</subj_crse>
</Projects>
</person>
</persons>
Je suis en mesure de récupérer les données jusqu'à ce que le noeud preferredfirstName et après que, depuis le noeud détails a des enfants plus que je suis incapable d'en extraire les données. Ci-dessous mon code PHP:
$xml = simplexml_load_file('list.xml');
$i = 1;
$values = [];
$columns = array('id', 'lastName', 'firstName',
'middleName', 'preferredfirstName', 'details', 'Projects');
$fs = fopen('ODU.csv', 'w');
fputcsv($fs, $columns);
fclose($fs);
$node = $xml->xpath('//person');
foreach ($node as $n) {
$child = $xml->xpath('//person['.$i.']/*');
foreach ($child as $value) {
$values[] = $value;
}
$fs = fopen('test.csv', 'a');
fputcsv($fs, $values);
fclose($fs);
$values = [];
$i++;
}
J'ai besoin de la sortie dans le fichier CSV avec les détails de chaque nœud dans colums séparés comme ci-dessous:
Les données que j'ai considérées font partie de très grandes données. Je dois donc le considérer comme un fichier séparé. – KSK
Ce n'est pas un problème, vous pouvez charger un fichier XML facilement - voir les changements ci-dessus – RamRaider
Si les données en XML changent dynamiquement, cela ne fonctionne pas correctement car chaque fois que nous ne pouvons pas charger le fichier XML manuellement. – KSK