在foreach xslt中的条件

时间:2016-11-04 16:55:56

标签: xml xslt

我是xslt的新手,我们正在使用xslt 1.0进行xml转换。 我有一个源xml,其中一个元素PID11正在重复。 PID11具有子元素XAD.7。值XAD.7可以是“Home”,“Business”,“Alternate”等,但每个值都是一次。 PID11可以重复多次。我们要求首先检查XAD.7为'Home'。如果XAD.7为'Home',只需将子节点复制到目标。如果XAD.7为'Home',则无法找到对于孩子,检查XAD.7为'Business'。如果找到'Business',只需复制子节点,依此类推。

以下是Source xml

 <ADT_A01 xmlns="http://www.edifecs.com/xdata/200"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         XDataVersion="2.0" Standard="HL7" Version="2.3"
         CreatedDate="2016-08-25T23:58:43" CreatedBy="XEngine_3000"
         GUID="{855FB5C6-6B5A-11E6-9457-005056BC4156}">
   <Internal-Properties>
      <Data-Structure Name="Message">
         <Lookup Name="InternatCodeAlternateID"/>
         <Lookup Name="InternatCodeAlternateSystem"/>
         &gt;
      </Data-Structure>
   </Internal-Properties>
   <MSH>
      <MSH.1>|</MSH.1>
      <MSH.2>^~\&amp;</MSH.2>
         </MSH>
   <PID>
      <PID.1>1</PID.1>
      <PID.2 xsi:nil="true"/>
        <PID.11>
         <XAD.1>531 Business 11TH ST</XAD.1>
         <XAD.2 xsi:nil="true"/>
         <XAD.3 xsi:nil="true"/>
         <XAD.4>CA</XAD.4>
         <XAD.5 xsi:nil="true"/>
         <XAD.6 xsi:nil="true"/>
         <XAD.7>Business</XAD.7>
      </PID.11>
      <PID.11>
         <XAD.1>531 Home 11TH ST</XAD.1>
         <XAD.2 xsi:nil="true"/>
         <XAD.3>LONG BEACH</XAD.3>
         <XAD.4>CA</XAD.4>
         <XAD.5>90813</XAD.5>
         <XAD.6>USA</XAD.6>
         <XAD.7>Home</XAD.7>
         <XAD.8 xsi:nil="true"/>
         <XAD.9>Los Angeles</XAD.9>
      </PID.11>

      <PID.12 xsi:nil="true"/>
      <PID.13>
         <XTN.1>(562)495-1306</XTN.1>
      </PID.13>
      <PID.14>
         <XTN.1>5627194222</XTN.1>
      </PID.14>
      <PID.15>
         <CE_0296.1>SP</CE_0296.1>
      </PID.15>
   </PID>
   <PV1>
      <PV1.1>1</PV1.1>
      <PV1.2>I</PV1.2>
      <PV1.3>
         <PL.1>5U</PL.1>
         <PL.2>00</PL.2>
         <PL.3>7</PL.3>
         <PL.4>
            <HD.1>HAR</HD.1>
         </PL.4>
      </PV1.3>
      <PV1.4>1</PV1.4>
      <PV1.5 xsi:nil="true"/>
      <PV1.6 xsi:nil="true"/>
   </PV1>
</ADT_A01>

预期的xml输出:

<?xml version = '1.0' encoding = 'UTF-8'?>
<top:AdtLevel1SegmentsCollection xmlns:bpmn="http://schemas.oracle.com/bpm/xpath" xmlns:top="http://xmlns.oracle.com/pcbpel/adapter/db/top/Insert_HL7_ADT_A01_Staging">
   <top:AdtLevel1Segments>
      <top:msh10MsgCntrlId>Q10139555T12193933X316716</top:msh10MsgCntrlId>
      <top:msh4Sendfac>HUMC_EGATE</top:msh4Sendfac>
      <top:msh7MsgTsDt/>
      <top:pid3InpidCx1Id>100004465</top:pid3InpidCx1Id>
      <top:pid18Cx1Paccntno/>
      <top:pv119_Cx1Visitnumb/>
      <top:msh1FieldSeparator>|</top:msh1FieldSeparator>
      <top:msh2EncodingCharacters>^~\&amp;</top:msh2EncodingCharacters>
      <top:msh3Sendapp>
         CERNER
      </top:msh3Sendapp>
      <top:msh5Recapp>
         AFFINITY
      </top:msh5Recapp>
      <top:msh6Recfac>
         HAR
      </top:msh6Recfac>
      <top:msh8Security/>
      <top:msh9CmMsg1Msgid/>
      <top:msh9CmMsg2Trigevent/>
      <top:msh11Pt1ProcId>P</top:msh11Pt1ProcId>
      <top:msh11Pt2ProcMode/>
      <top:msh12VersionId>2.3</top:msh12VersionId>
      <top:msh13SeqNumber/>
      <top:msh14ContPointer/>
      <top:msh15AcceptAckType/>
      <top:evn1EventTypecode/>
      <top:evn2Ts1RecordedDatetime/>
      <top:evn2Ts2RecordedDatetime/>
      <top:evn5Cn1Operidcd/>
      <top:evn5Cn2Namelast/>
      <top:evn5Cn3Namefirst/>
      <top:evn5Cn4Namemidd/>
      <top:evn5Cn5Namesuff/>
      <top:evn5Cn6Namepref/>
      <top:evn6Ts1EventOccured/>
      <top:evn6Ts2EventOccured/>
      <top:drg1_Ce1DiagReltdIdntfr/>
      <top:drg1_Ce2DiagTxt/>
      <top:drg2_Ts1DiagAssignDt/>
      <top:drg2_Ts2DiagAssignTm/>
      <top:drg3_DiagApprvlInd/>
      <top:drg4_DiagGrpReviewCd/>
      <top:drg5_Ce1OutReimTypIdnt/>
      <top:ub11_SetId/>
      <top:ub12_BloodDeductible/>
      <top:ub21_SetId/>
      <top:ub22_CoInsDays/>
      <top:ub23_ConditionCd/>
      <top:z011_Intpatientid/>
      <top:z012_Medicaidid/>
      <top:z013_Gendercode/>
      <top:z014_Dob/>
      <top:z101_Patientaccno/>
      <top:z102_Lstspuncldaccno/>
      <top:z103_Pcatcode/>
      <top:insertDt>2016-11-04T21:10:54.966+05:30</top:insertDt>
      <top:messageType>ADT_A01Hist</top:messageType>
      <top:processedFlag>H</top:processedFlag>
      <top:adtLevel1Pid>
         <top:pid1SetidPatientid>1</top:pid1SetidPatientid>
         <top:pid2ExpidCx1Id/>
         <top:pid4AlpidCx1Id/>
         <top:pid5Xpn1PnameLast/>
         <top:pid5Xpn2PnameFirst/>
         <top:pid5Xpn3PnameMidd/>
         <top:pid6Xpn1PmothmnameLast/>
         <top:pid6Xpn2PmothmnameFirst/>
         <top:pid6Xpn3PmothmnameMidd/>
         <top:pid7Ts1Pdateofbirth>19470409</top:pid7Ts1Pdateofbirth>
         <top:pid7Ts2Ptimeofbirth/>
         <top:pid8Psexcode>F</top:pid8Psexcode>
         <top:pid9Xpn1PalianameLast/>
         <top:pid9Xpn2PalianameFirst/>
         <top:pid9Xpn3PalianameMidd/>
         <top:pid11Xad1Straddr1>531 Home 11TH ST</top:pid11Xad1Straddr1>
          <top:pid12Countycd/>
         <top:pid13Xtn1Pathomephnnn>(562)495-1306</top:pid13Xtn1Pathomephnnn>
         <top:pid13Xtn2Telecomusecd/>
         <top:pid14Xtn1Patbusphnnn>5627194222</top:pid14Xtn1Patbusphnnn>
         <top:pid14Xtn2Telecomusecd/>
         <top:pid15Ce1Primlangcd>SP</top:pid15Ce1Primlangcd>
         <top:pid16Maritalcode/>
         <top:pid17Religion/>
         <top:pid19Ssn/>
         <top:pid20Dln1Dln/>
         <top:pid20Dln2Issuedt/>
         <top:pid20Dln3Expdt/>
         <top:pid21Cx1Mothid/>
         <top:pid22Pethcd/>
         <top:pid23Pbirthplace/>
         <top:pid24Pmultbirthind/>
         <top:pd11_LivDep/>
         <top:pd12_LivArr/>
         <top:pd13_Xon1Orgname/>
         <top:pd13_Xon2Nametype/>
         <top:pd14_Xcn1Id/>
         <top:pd14_Xcn2Namelast/>
         <top:pd14_Xcn3Namefirst/>
         <top:pd14_Xcn4Namemidd/>
         <top:pd15_Stndcd/>
         <top:pd16_Handicap/>
         <top:pd17_LivingWillCd/>
         <top:pd18_OrganDonorCd/>
         <top:pd19_Separatbill/>
         <top:pd110_Cx1Duppat/>
         <top:pd111_Ce1Pubindcd/>
         <top:pd112_Protind/>
         <top:zpi1Setid/>
         <top:zpi2Ptempaddr/>
         <top:zpi3Presdt/>
         <top:zpi4Pbrthplace/>
         <top:zei1Setid/>
         <top:zei2Emplsttscd/>
         <top:zei3EmplnameFt/>
         <top:insertDt>2016-11-04T21:10:54.967+05:30</top:insertDt>
         <top:messageType>ADT_A01Hist</top:messageType>
         <top:processedFlag>H</top:processedFlag>
         <top:adtLevel2PidRaceCollection>
            <top:AdtLevel2PidRace>
               <top:pid10PatientRace>1</top:pid10PatientRace>
               <top:insertDt>2016-11-04T21:10:54.967+05:30</top:insertDt>
               <top:messageType>ADT_A01Hist</top:messageType>
               <top:processedFlag>H</top:processedFlag>
            </top:AdtLevel2PidRace>
            <top:AdtLevel2PidRace>
               <top:pid10PatientRace>""</top:pid10PatientRace>
               <top:insertDt>2016-11-04T21:10:54.967+05:30</top:insertDt>
               <top:messageType>ADT_A01Hist</top:messageType>
               <top:processedFlag>H</top:processedFlag>
            </top:AdtLevel2PidRace>
         </top:adtLevel2PidRaceCollection>
      </top:adtLevel1Pid>
      <top:adtLevel1Pv1>
         <top:pv11_Setid>1</top:pv11_Setid>
         <top:pv12_Pclass>I</top:pv12_Pclass>
         <top:pv13_Pl1AssgplocPoc>5U</top:pv13_Pl1AssgplocPoc>
         <top:pv13_Pl2AssgplocRoom>00</top:pv13_Pl2AssgplocRoom>
         <top:pv13_Pl3AssgplocBed>7</top:pv13_Pl3AssgplocBed>
         <top:pv13_Pl4AssgplocFac>
            HAR
         </top:pv13_Pl4AssgplocFac>
         <top:pv14_Admtype>1</top:pv14_Admtype>
         <top:pv16_Pl1PplocPoc/>
         <top:pv16_Pl2PplocRoom/>
         <top:pv16_Pl3PplocBed/>
         <top:pv16_Pl4PplocFac/>
         <top:pv17_Xcn1Attenddoctid/>
         <top:pv17_Xcn2Namelast/>
         <top:pv17_Xcn3Namefirst/>
         <top:pv17_Xcn4Namemidd/>
         <top:pv19_Xcn1Consdoctid/>
         <top:pv19_Xcn2Namelast/>
         <top:pv19_Xcn3Namefirst/>
         <top:pv19_Xcn4Namemidd/>
         <top:pv110_HospitalService/>
         <top:pv114_Admitsrccd/>
         <top:pv117_Xcn1Admitdoctid/>
         <top:pv117_Xcn2Namelast/>
         <top:pv117_Xcn3Namefirst/>
         <top:pv117_Xcn4Namemidd/>
         <top:pv118_Ptype/>
         <top:pv120_Fc1Finclass/>
         <top:pv120_Fc2Effdt/>
         <top:pv136_Dischargaccntdisp/>
         <top:pv141_Accntstatus/>
         <top:pv144_AdmtdtTs1/>
         <top:pv144_AdmtdtTs2/>
         <top:pv145_DischdtTs1/>
         <top:pv145_DischdtTs2/>
         <top:pv21_Pl1PrplocPoc/>
         <top:pv21_Pl2PrplocRoom/>
         <top:pv21_Pl3PrplocBed/>
         <top:pv21_Pl4PrplocFac/>
         <top:pv21_Pl5PrplocBedsta/>
         <top:pv21_Pl6PrplocLoctype/>
         <top:pv21_Pl7PrplocBuild/>
         <top:pv21_Pl8PrplocFloor/>
         <top:pv21_Pl9PrplocLocdesc/>
         <top:pv23_Ce1Admitreasoncd/>
         <top:pv24_Ce1Trreasoncd/>
         <top:zvi1TraumaCd/>
         <top:zvi2TraumaDtTm/>
         <top:zvi3LastTraumaDtTm/>
         <top:zvi4ReferringComment/>
         <top:zvi5ChartLocation/>
         <top:insertDt>2016-11-04T21:10:54.968+05:30</top:insertDt>
         <top:messageType>ADT_A01Hist</top:messageType>
         <top:processedFlag>H</top:processedFlag>
      </top:adtLevel1Pv1>

   </top:AdtLevel1Segments>
</top:AdtLevel1SegmentsCollection>

我无法将xslt放在此处,因为它超出了字符限制。

我只想迭代重复PID11的所有实例并检查XAD.7是否存在,它可以忽略PID11的其他实例,并将具有XAD.7的实例复制为目标任何一个的target.if PID11实例XAD.7作为Home不存在,然后将XAD.7检查为Business.If XAD.7作为Business找到,忽略PID11的其他实例,只需将具有XAD.7作为Business的实例复制到目标

你能帮助xslt写作吗。

1 个答案:

答案 0 :(得分:0)

我对你所追求的内容感到有些困惑,但如果你想要做的就是处理“家”&#39;条目后跟&#39; business&#39;你可以这样做吗?

<xsl:apply-templates select="PID.11[XAD.7='Home']/>
<xsl:apply-templates select="PID.11[XAD.7='Business']/>

或者(如果选择不会轻易捕获输入文档中的所有元素),您可以使用&#39; Home&#39;和&#39;商业&#39;模式。