2016-11-04 77 views
0

我是xslt的新手,我們使用xslt 1.0進行xml轉換。 我有一個源xml,其中一個元素PID11正在重複。 PID11具有子元素XAD.7。值XAD.7可以是'家','商業','交替'等,但他們每一個將是一次。 PID11可以重複多次。我們的要求首先檢查XAD.7爲'Home'。如果XAD.7爲'Home',只需將子節點複製到目標。如果XAD.7沒有找到'Home'的孩子,檢查XAD.7爲'Business',如果'Business'被發現只是複製子節點等等。foreach中的條件xslt

下面是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是否爲Home,它可以忽略其他PID11實例並將具有XAD.7作爲Home的實例複製到target.if中的任何一個作爲Home的PID11實例XAD.7不存在,然後檢查XAD.7是否爲Business。如果找到XAD.7爲Business,則忽略其他PID11實例,並將具有XAD.7的實例作爲Business複製到目標

你可以請xslt寫作幫忙。

+0

任何幫助,將不勝感激。請讓我知道,如果我應該給一個簡短的XML – user3151878

+1

如果你確實簡化了你的輸出XML只關注你被卡住的部分可能會有所幫助。目前,您的輸出XML包含大量可能需要用於您的應用程序的(空)元素,但與實際問題無關。有關構建問題的一些有用建議,請參閱http://stackoverflow.com/help/mcve。謝謝! –

回答

0

我對你到底在想什麼感到有點困惑,但是如果你想要做的只是流程'家'條目跟'業務'條目,你可以做這樣的事情嗎?

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

或者(如果選擇不會輕易捕獲到所有的輸入文檔中的所有元件),你可以使用一個「家」和「商務」模式。