I have a large HL7 message. The information I want is contained in the OBX segments and there are at least 10 OBX segments per message (as well as a load of other segments - PID, MSH etc)
I want to loop through each OBX segment and get the information held in OBX.3.2 and in OBX5.1 When I run this code I just get the data from the first OBX segment. What am I doing wrong?
$results = simplexml_load_string($payload);
//var_dump($results);
$test = $results->{'OBX'}->{'OBX.5'}->{'OBX.5.1'};
$testresult = $results->{'OBX'}->{'OBX.3'}->{'OBX.3.2'};
foreach($testresult as $b)
{
echo "$b<br>";
}
foreach($test as $a)
{
echo "$a<br>";
}
<HL7Message>
<MSH>
<MSH.1>|</MSH.1>
<MSH.2>^~\&</MSH.2>
<MSH.3>
<MSH.3.1>MPS</MSH.3.1>
</MSH.3>
<MSH.4>
<MSH.4.1></MSH.4.1>
</MSH.4>
<MSH.5/>
<MSH.6/>
<MSH.7>
<MSH.7.1>201402181659+1100</MSH.7.1>
</MSH.7>
<MSH.8/>
<MSH.9>
<MSH.9.1>ORU</MSH.9.1>
<MSH.9.2>R01</MSH.9.2>
</MSH.9>
<MSH.10>
<MSH.10.1>20140218-1.F.25399</MSH.10.1>
</MSH.10>
<MSH.11>
<MSH.11.1>P</MSH.11.1>
</MSH.11>
<MSH.12>
<MSH.12.1>2.3</MSH.12.1>
</MSH.12>
<MSH.13>
<MSH.13.1>1</MSH.13.1>
</MSH.13>
<MSH.14/>
<MSH.15>
<MSH.15.1>NE</MSH.15.1>
</MSH.15>
<MSH.16>
<MSH.16.1>AL</MSH.16.1>
</MSH.16>
<MSH.17>
<MSH.17.1>AU</MSH.17.1>
</MSH.17>
</MSH>
<PID>
<PID.1>
<PID.1.1>1</PID.1.1>
</PID.1>
<PID.2/>
<PID.3>
</PID.3>
<PID.4/>
<PID.5>
</PID.5>
<PID.6/>
<PID.7>
<PID.7.1></PID.7.1>
</PID.7>
<PID.8>
<PID.8.1></PID.8.1>
</PID.8>
<PID.9/>
<PID.10/>
<PID.11>
</PID.11>
<PID.12/>
<PID.13>
<PID.13.1/>
<PID.13.2/>
<PID.13.3/>
<PID.13.4/>
<PID.13.5/>
<PID.13.6/>
<PID.13.7>97953309</PID.13.7>
</PID.13>
<PID.14>
<PID.14.1/>
<PID.14.2/>
<PID.14.3/>
<PID.14.4/>
<PID.14.5/>
<PID.14.6/>
<PID.14.7/>
</PID.14>
<PID.15/>
<PID.16/>
<PID.17/>
<PID.18/>
<PID.19>
<PID.19.1>3156547109</PID.19.1>
</PID.19>
<PID.20/>
<PID.21/>
<PID.22/>
<PID.23/>
<PID.24/>
<PID.25/>
<PID.26/>
<PID.27/>
<PID.28/>
<PID.29/>
<PID.30/>
</PID>
<PV1>
<PV1.1>
<PV1.1.1>1</PV1.1.1>
</PV1.1>
<PV1.2>
<PV1.2.1>O</PV1.2.1>
</PV1.2>
</PV1>
<ORC>
<ORC.1>
<ORC.1.1>RE</ORC.1.1>
</ORC.1>
<ORC.2/>
<ORC.3>
<ORC.3.1></ORC.3.1>
<ORC.3.2>NATA</ORC.3.2>
<ORC.3.3></ORC.3.3>
<ORC.3.4></ORC.3.4>
</ORC.3>
<ORC.4/>
<ORC.5>
<ORC.5.1>A</ORC.5.1>
</ORC.5>
<ORC.6/>
<ORC.7/>
<ORC.8/>
<ORC.9/>
<ORC.10/>
<ORC.11/>
<ORC.12>
<ORC.12.1></ORC.12.1>
<ORC.12.2></ORC.12.2>
<ORC.12.3></ORC.12.3>
<ORC.12.4/>
<ORC.12.5/>
<ORC.12.6></ORC.12.6>
</ORC.12>
</ORC>
<OBR>
<OBR.1>
<OBR.1.1>1</OBR.1.1>
</OBR.1>
<OBR.2/>
<OBR.3>
<OBR.3.1>323611694-C-C950</OBR.3.1>
<OBR.3.2></OBR.3.2>
<OBR.3.3></OBR.3.3>
<OBR.3.4>N</OBR.3.4>
</OBR.3>
<OBR.4>
<OBR.4.1>C-C950</OBR.4.1>
<OBR.4.2>SE-CHEMISTRY VIRTUAL</OBR.4.2>
<OBR.4.3>2133</OBR.4.3>
</OBR.4>
<OBR.5/>
<OBR.6>
<OBR.6.1>20140214</OBR.6.1>
</OBR.6>
<OBR.7>
<OBR.7.1>201402141630+1100</OBR.7.1>
</OBR.7>
<OBR.8/>
<OBR.9/>
<OBR.10/>
<OBR.11/>
<OBR.12/>
<OBR.13/>
<OBR.14>
<OBR.14.1>201402141630+1100</OBR.14.1>
</OBR.14>
<OBR.15/>
<OBR.16>
<OBR.16.1></OBR.16.1>
<OBR.16.2></OBR.16.2>
<OBR.16.3></OBR.16.3>
<OBR.16.4/>
<OBR.16.5/>
<OBR.16.6></OBR.16.6>
</OBR.16>
<OBR.17/>
<OBR.18/>
<OBR.19/>
<OBR.20>
<OBR.20.1>
<OBR.20.1.1>LN</OBR.20.1.1>
<OBR.20.1.2>323611694</OBR.20.1.2>
</OBR.20.1>
</OBR.20>
<OBR.21/>
<OBR.22>
<OBR.22.1>201402181659+1100</OBR.22.1>
</OBR.22>
<OBR.23/>
<OBR.24>
<OBR.24.1>CH</OBR.24.1>
</OBR.24>
<OBR.25>
<OBR.25.1>F</OBR.25.1>
</OBR.25>
<OBR.26/>
<OBR.27>
<OBR.27.1/>
<OBR.27.2/>
<OBR.27.3/>
<OBR.27.4>20140214</OBR.27.4>
<OBR.27.5/>
<OBR.27.6>R</OBR.27.6>
</OBR.27>
<OBR.28>
<OBR.28.1>0000000Y</OBR.28.1>
<OBR.28.2></OBR.28.2>
<OBR.28.3></OBR.28.3>
<OBR.28.4/>
<OBR.28.5/>
<OBR.28.6/>
</OBR.28>
<OBR.29/>
</OBR>
<OBX>
<OBX.1>
<OBX.1.1>1</OBX.1.1>
</OBX.1>
<OBX.2>
<OBX.2.1>NM</OBX.2.1>
</OBX.2>
<OBX.3>
<OBX.3.1>2951-2</OBX.3.1>
<OBX.3.2>S Sodium:</OBX.3.2>
<OBX.3.3>LN</OBX.3.3>
</OBX.3>
<OBX.4/>
<OBX.5>
<OBX.5.1>144</OBX.5.1>
</OBX.5>
<OBX.6>
<OBX.6.1>mmol/L</OBX.6.1>
<OBX.6.2>mmol/L</OBX.6.2>
</OBX.6>
<OBX.7>
<OBX.7.1>135-145</OBX.7.1>
</OBX.7>
<OBX.8/>
<OBX.9/>
<OBX.10/>
<OBX.11>
<OBX.11.1>F</OBX.11.1>
</OBX.11>
<OBX.12/>
<OBX.13/>
<OBX.14>
<OBX.14.1>201402150533</OBX.14.1>
</OBX.14>
</OBX>
<OBX>
<OBX.1>
<OBX.1.1>2</OBX.1.1>
</OBX.1>
<OBX.2>
<OBX.2.1>NM</OBX.2.1>
</OBX.2>
<OBX.3>
<OBX.3.1>2823-3</OBX.3.1>
<OBX.3.2>S Potassium:</OBX.3.2>
<OBX.3.3>LN</OBX.3.3>
</OBX.3>
<OBX.4/>
<OBX.5>
<OBX.5.1>5.6</OBX.5.1>
</OBX.5>
<OBX.6>
<OBX.6.1>mmol/L</OBX.6.1>
<OBX.6.2>mmol/L</OBX.6.2>
</OBX.6>
<OBX.7>
<OBX.7.1>3.5-5.5</OBX.7.1>
</OBX.7>
<OBX.8>
<OBX.8.1>H</OBX.8.1>
</OBX.8>
<OBX.9/>
<OBX.10/>
<OBX.11>
<OBX.11.1>F</OBX.11.1>
</OBX.11>
<OBX.12/>
<OBX.13/>
<OBX.14>
<OBX.14.1>201402150533</OBX.14.1>
</OBX.14>
</OBX>
<OBX>
<OBX.1>
<OBX.1.1>3</OBX.1.1>
</OBX.1>
<OBX.2>
<OBX.2.1>NM</OBX.2.1>
</OBX.2>
<OBX.3>
<OBX.3.1>2075-0</OBX.3.1>
<OBX.3.2>S Chloride:</OBX.3.2>
<OBX.3.3>LN</OBX.3.3>
</OBX.3>
<OBX.4/>
<OBX.5>
<OBX.5.1>103</OBX.5.1>
</OBX.5>
<OBX.6>
<OBX.6.1>mmol/L</OBX.6.1>
<OBX.6.2>mmol/L</OBX.6.2>
</OBX.6>
<OBX.7>
<OBX.7.1>95-110</OBX.7.1>
</OBX.7>
<OBX.8/>
<OBX.9/>
<OBX.10/>
<OBX.11>
<OBX.11.1>F</OBX.11.1>
</OBX.11>
<OBX.12/>
<OBX.13/>
<OBX.14>
<OBX.14.1>201402150533</OBX.14.1>
</OBX.14>
</OBX>
</HL7Message>
This script will gives your the required output
<?php
$payload = 'job.xml';
$results = simplexml_load_file($payload);
foreach($results->OBX as $obx)
{
//var_dump($results);
$test = $obx->{'OBX.5'}->{'OBX.5.1'};
$testresult = $obx->{'OBX.3'}->{'OBX.3.2'};
echo $testresult .' : '.$test.'<br/>';
}