Blog : Merge To Xml Files Together Based On Values
Merge To Xml Files Together Based On Values
The application reads 2 xml files and then goes through each staff member record from one of the xml files. For each staff member record it looks for the corresponding record in the second xml and once it has been discovered it generates a series of new nodes and populates it with the information from the second xml file. I would like to place these new nodes in the the relating staff record at a specific point (at present it just dumps them all at the bottom of the xml document)
The PHP
<?php
$schoolExtract =newDOMDocument;
$schoolExtract->load('schoolExtract.xml');
$kcsExtract =newDOMDocument;
$kcsExtract->preserveWhiteSpace =false;
$kcsExtract->load('kcsFinalExtract.xml');
$xp =newDOMXPath($kcsExtract);
header("Content-Type: text/plain");
$kcsUserRecord = $kcsExtract->getElementsByTagName("StaffDetails");
$schoolRecord = $schoolExtract->getElementsByTagName("StaffDetails");
$schoolRecordCount = $schoolExtract->getElementsByTagName("SchoolWorkforceMember");
$noRecords = $schoolRecordCount->length;
set_time_limit(0);
$i =0;foreach($schoolRecord as $row2){
$foundRecord =0;
$NationalInsuranceSE = $row2->getElementsByTagName("NINumber")->item(0)->nodeValue;
$StaffMemberNameSE = $row2->getElementsByTagName("PersonFamilyName")->item(0)->nodeValue;
$PersonGivenNameSE = $row2->getElementsByTagName("PersonGivenName")->item(0)->nodeValue;
$DOBSE = $row2->getElementsByTagName("PersonBirthDate")->item(0)->nodeValue;
$newDOBSE = date("d/m/Y", strtotime($DOBSE));foreach($kcsUserRecord as $row4){
$NationalInsuranceKCS = $row4->getElementsByTagName("NationalInsurance")->item(0)->nodeValue;
$StaffMemberNameKCS = $row4->getElementsByTagName("StaffMemberName")->item(0)->nodeValue;
$DOBKCS = $row4->getElementsByTagName("PersonBirthDate")->item(0)->nodeValue;if($NationalInsuranceSE == $NationalInsuranceKCS && $StaffMemberNameSE == $StaffMemberNameKCS){
$foundRecord =1;
$xpQuery = $xp->query('/KCSExtract/StaffRecord[StaffDetails/NationalInsurance="'. $NationalInsuranceKCS .'"]');foreach($xpQuery as $item){
$newItem = $schoolExtract->documentElement->appendChild(
$schoolExtract->createElement('ContractOrServiceGroup'));foreach(array('ContractType','ContractStart','ContractEnd','Post','SchoolArrivalDate','DestinationCode','Origin','LASchoolLevel','Estab','PostLevelDetails','Roles')as $elementName){
$newItem->appendChild(
$schoolExtract->importNode(
$item->getElementsByTagName($elementName)->item(0),true));}}
$i++;}}if($foundRecord ==1){/*No Handlers in place yet*/}elseif($foundRecord ==0){/*No Handlers in place yet*/}}
$schoolExtract->formatOutput =true;
echo $schoolExtract->saveXml();?>
schoolExtract.xml
<Members><SchoolWorkforceMembers><SchoolWorkforceMember><StaffDetails><TeacherNumber>123456</TeacherNumber><StaffMemberName><PersonFamilyName>Wayne</PersonFamilyName><GivenNames><GivenName><PersonGivenName>Bruce</PersonGivenName></GivenName></GivenNames></StaffMemberName><NINumber>BW123456</NINumber><GenderCurrent>2</GenderCurrent><PersonBirthDate>1974-08-07</PersonBirthDate><Ethnicity>WBRI</Ethnicity><Disability>NOBT</Disability><QTStatus>true</QTStatus><HLTAStatus>false</HLTAStatus></StaffDetails><Absences><Absence><FirstDayOfAbsence>2011-09-05</FirstDayOfAbsence><LastDayOfAbsence>2011-10-30</LastDayOfAbsence><WorkingDaysLost>033.0</WorkingDaysLost><AbsenceCategory>SIC</AbsenceCategory><Estab>6905</Estab></Absence><Absence><FirstDayOfAbsence>2012-01-17</FirstDayOfAbsence><LastDayOfAbsence>2012-01-17</LastDayOfAbsence><AbsenceCategory>OTH</AbsenceCategory><Estab>6905</Estab></Absence></Absences></SchoolWorkforceMember><SchoolWorkforceMember><StaffDetails><TeacherNumber>123456</TeacherNumber><StaffMemberName><PersonFamilyName>Parker</PersonFamilyName><GivenNames><GivenName><PersonGivenName>Peter</PersonGivenName></GivenName></GivenNames></StaffMemberName><NINumber>SM123456</NINumber><GenderCurrent>2</GenderCurrent><PersonBirthDate>1974-08-07</PersonBirthDate><Ethnicity>WBRI</Ethnicity><Disability>NOBT</Disability><QTStatus>true</QTStatus><HLTAStatus>false</HLTAStatus></StaffDetails><Absences><Absence><FirstDayOfAbsence>2011-09-05</FirstDayOfAbsence><LastDayOfAbsence>2011-10-30</LastDayOfAbsence><WorkingDaysLost>033.0</WorkingDaysLost><AbsenceCategory>SIC</AbsenceCategory><Estab>6905</Estab></Absence><Absence><FirstDayOfAbsence>2012-01-17</FirstDayOfAbsence><LastDayOfAbsence>2012-01-17</LastDayOfAbsence><AbsenceCategory>OTH</AbsenceCategory><Estab>6905</Estab></Absence></Absences></SchoolWorkforceMember></SchoolWorkforceMembers></Members>
kcsFinalExtract.xml
<KCSExtract><StaffRecord><StaffDetails><NationalInsurance>BW123456</NationalInsurance><PersonBirthDate>1974-08-07</PersonBirthDate><StaffMemberName>Wayne</StaffMemberName><PersonGivenName>Bruce</PersonGivenName></StaffDetails><ContractOrServiceGroup><ContractOrService><ContractType>PRM</ContractType><ContractStart>01/09/2003</ContractStart><ContractEnd></ContractEnd><Post>TCH</Post><SchoolArrivalDate>01/12/2007</SchoolArrivalDate><DestinationCode>TU</DestinationCode><Origin>NOTKNW</Origin><LASchoolLevel></LASchoolLevel><Estab></Estab><PostLevelDetails><Payments><Scale>TU</Scale><RegionSpine>EW</RegionSpine><SpinePoint>U2</SpinePoint><TotalPay>35,447.00</TotalPay><SafeguardedSalary>FALSE</SafeguardedSalary></Payments><Hours><Hours>32.5</Hours><FTEHours>32.5</FTEHours><WeeksPerYear>52</WeeksPerYear></Hours></PostLevelDetails><Roles><Role><RoleIdentifier>TCHR</RoleIdentifier></Role></Roles></ContractOrService></ContractOrServiceGroup></StaffRecord><StaffRecord><StaffDetails><NationalInsurance>SM123456</NationalInsurance><PersonBirthDate>03/01/1971</PersonBirthDate><StaffMemberName>Parker</StaffMemberName><PersonGivenName>Peter</PersonGivenName></StaffDetails><ContractOrServiceGroup><ContractOrService><ContractType>PRM</ContractType><ContractStart>01/09/2003</ContractStart><ContractEnd></ContractEnd><Post>TCH</Post><SchoolArrivalDate>01/12/2007</SchoolArrivalDate><DestinationCode>TU</DestinationCode><Origin>NOTKNW</Origin><LASchoolLevel></LASchoolLevel><Estab></Estab><PostLevelDetails><Payments><Scale>TU</Scale><RegionSpine>EW</RegionSpine><SpinePoint>U2</SpinePoint><TotalPay>35,447.00</TotalPay><SafeguardedSalary>FALSE</SafeguardedSalary></Payments><Hours><Hours>32.5</Hours><FTEHours>32.5</FTEHours><WeeksPerYear>52</WeeksPerYear></Hours></PostLevelDetails><Roles><Role><RoleIdentifier>TCHR</RoleIdentifier></Role></Roles></ContractOrService></ContractOrServiceGroup></StaffRecord></KCSExtract>
Generated Output
<?xml version="1.0"?><Members><SchoolWorkforceMembers><SchoolWorkforceMember><StaffDetails><TeacherNumber>123456</TeacherNumber><StaffMemberName><PersonFamilyName>Wayne</PersonFamilyName><GivenNames><GivenName><PersonGivenName>Bruce</PersonGivenName></GivenName></GivenNames></StaffMemberName><NINumber>BW123456</NINumber><GenderCurrent>2</GenderCurrent><PersonBirthDate>1974-08-07</PersonBirthDate><Ethnicity>WBRI</Ethnicity><Disability>NOBT</Disability><QTStatus>true</QTStatus><HLTAStatus>false</HLTAStatus></StaffDetails><Absences><Absence><FirstDayOfAbsence>2011-09-05</FirstDayOfAbsence><LastDayOfAbsence>2011-10-30</LastDayOfAbsence><WorkingDaysLost>033.0</WorkingDaysLost><AbsenceCategory>SIC</AbsenceCategory><Estab>6905</Estab></Absence><Absence><FirstDayOfAbsence>2012-01-17</FirstDayOfAbsence><LastDayOfAbsence>2012-01-17</LastDayOfAbsence><AbsenceCategory>OTH</AbsenceCategory><Estab>6905</Estab></Absence></Absences></SchoolWorkforceMember><SchoolWorkforceMember><StaffDetails><TeacherNumber>123456</TeacherNumber><StaffMemberName><PersonFamilyName>Parker</PersonFamilyName><GivenNames><GivenName><PersonGivenName>Peter</PersonGivenName></GivenName></GivenNames></StaffMemberName><NINumber>SM123456</NINumber><GenderCurrent>2</GenderCurrent><PersonBirthDate>1974-08-07</PersonBirthDate><Ethnicity>WBRI</Ethnicity><Disability>NOBT</Disability><QTStatus>true</QTStatus><HLTAStatus>false</HLTAStatus></StaffDetails><Absences><Absence><FirstDayOfAbsence>2011-09-05</FirstDayOfAbsence><LastDayOfAbsence>2011-10-30</LastDayOfAbsence><WorkingDaysLost>033.0</WorkingDaysLost><AbsenceCategory>SIC</AbsenceCategory><Estab>6905</Estab></Absence><Absence><FirstDayOfAbsence>2012-01-17</FirstDayOfAbsence><LastDayOfAbsence>2012-01-17</LastDayOfAbsence><AbsenceCategory>OTH</AbsenceCategory><Estab>6905</Estab></Absence></Absences></SchoolWorkforceMember></SchoolWorkforceMembers><ContractOrServiceGroup><ContractType>PRM</ContractType><ContractStart>01/09/2003</ContractStart><ContractEnd/><Post>TCH</Post><SchoolArrivalDate>01/12/2007</SchoolArrivalDate><DestinationCode>TU</DestinationCode><Origin>NOTKNW</Origin><LASchoolLevel/><Estab/><PostLevelDetails><Payments><Scale>TU</Scale><RegionSpine>EW</RegionSpine><SpinePoint>U2</SpinePoint><TotalPay>35,447.00</TotalPay><SafeguardedSalary>FALSE</SafeguardedSalary></Payments><Hours><Hours>32.5</Hours><FTEHours>32.5</FTEHours><WeeksPerYear>52</WeeksPerYear></Hours></PostLevelDetails><Roles><Role><RoleIdentifier>TCHR</RoleIdentifier></Role></Roles></ContractOrServiceGroup><ContractOrServiceGroup><ContractType>PRM</ContractType><ContractStart>01/09/2003</ContractStart><ContractEnd/><Post>TCH</Post><SchoolArrivalDate>01/12/2007</SchoolArrivalDate><DestinationCode>TU</DestinationCode><Origin>NOTKNW</Origin><LASchoolLevel/><Estab/><PostLevelDetails><Payments><Scale>TU</Scale><RegionSpine>EW</RegionSpine><SpinePoint>U2</SpinePoint><TotalPay>35,447.00</TotalPay><SafeguardedSalary>FALSE</SafeguardedSalary></Payments><Hours><Hours>32.5</Hours><FTEHours>32.5</FTEHours><WeeksPerYear>52</WeeksPerYear></Hours></PostLevelDetails><Roles><Role><RoleIdentifier>TCHR</RoleIdentifier></Role></Roles></ContractOrServiceGroup></Members>
Desired output
<Members><SchoolWorkforceMembers><SchoolWorkforceMember><StaffDetails><TeacherNumber>123456</TeacherNumber><StaffMemberName><PersonFamilyName>Wayne</PersonFamilyName><GivenNames><GivenName><PersonGivenName>Bruce</PersonGivenName></GivenName></GivenNames></StaffMemberName><NINumber>BW123456</NINumber><GenderCurrent>2</GenderCurrent><PersonBirthDate>1974-08-07</PersonBirthDate><Ethnicity>WBRI</Ethnicity><Disability>NOBT</Disability><QTStatus>true</QTStatus><HLTAStatus>false</HLTAStatus></StaffDetails><ContractOrServiceGroup><ContractOrService><ContractType>PRM</ContractType>