我是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"/>
>
</Data-Structure>
</Internal-Properties>
<MSH>
<MSH.1>|</MSH.1>
<MSH.2>^~\&</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>^~\&</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寫作幫忙。
任何幫助,將不勝感激。請讓我知道,如果我應該給一個簡短的XML – user3151878
如果你確實簡化了你的輸出XML只關注你被卡住的部分可能會有所幫助。目前,您的輸出XML包含大量可能需要用於您的應用程序的(空)元素,但與實際問題無關。有關構建問題的一些有用建議,請參閱http://stackoverflow.com/help/mcve。謝謝! –