2014-02-24 132 views
0

我有一个很大的HL7消息。我想要的信息包含在OBX段中,并且每个消息至少有10个OBX段(以及其他段的负载 - PID,MSH等)如何通过SimpleXML循环

我想遍历每个OBX段并获取在OBX.3.2和OBX5.1中保存的信息当我运行这段代码时,我只是从第一个OBX段获取数据。我究竟做错了什么?

$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>^~\&amp;</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> 

回答

0

这个脚本会给出你所需要的输出

<?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/>'; 

} 
+0

作业XML文件的HL7消息文件 – Sundar

+1

感谢孙大信。我自己想出了相同的解决方案,但非常感谢花时间回答。当我完成这个当前的项目时,我将发布整个代码,以便任何需要解析HL7消息的人都有一个起点。 – Legless