2013-10-21 42 views
0

我對XSLT世界非常陌生,試圖解決下面提到的XML中的分組問題。我具有與ServiceChanges一起作爲根標記的相同XML。在根標記下,我可以有零個或多個CancelVisit和ChangedFrequency標記。在每個標籤中都有一個共同的字段FrequencyId。現在我的任務是根據Common FrequencyID將取消訪問和更改頻率標籤組合在一起(如果有的話),否則將被視爲獨立。在XSLT中分組

示例XML

<ServiceChanges> 
     <CancelVisit> 
      <VisitDate>2013-09-12</VisitDate> 
      <ProviderComments>Provider Comments</ProviderComments> 
      <CCMFrequency xmlns="http://air-ca.com"> 
       <StartDate>2013-09-06</StartDate> 
       <EndDate>2013-09-27</EndDate> 
       <Quantity>3.00</Quantity> 
       <Summary>3.00 hour(s) per week, every week, starting 06-Sep-2013 and ending 27-Sep-2013</Summary> 
       <AdditionalDetails>go to side door, call before visiting. Visit in morning. 
        Authorizing CC: Williamson, Fiona</AdditionalDetails> 
       <Type>Weekly</Type> 
       <RecurrenceTimes>0</RecurrenceTimes> 
       <Interval>1</Interval> 
       <RecurrenceNumber>0</RecurrenceNumber> 
       <RecurrencePeriod>0</RecurrencePeriod> 
       <NumberOfHoursPerVisit>0.00</NumberOfHoursPerVisit> 
       <ReasonForChange /> 
       <FrequencyId>fca44cac-7319-e311-8472-00155d051350</FrequencyId> 
       <ExternalSystemId>923C56CC-6532-4A3A-A071-3474F679602C</ExternalSystemId> 
      </CCMFrequency> 
      <ChangeRequestStatusName>Approved</ChangeRequestStatusName> 
     </CancelVisit> 
     <CancelVisit> 
      <VisitDate>2013-09-12</VisitDate> 
      <ProviderComments>Provider Comments</ProviderComments> 
      <CCMFrequency xmlns="http://air-ca.com"> 
       <StartDate>2013-09-06</StartDate> 
       <EndDate>2013-09-27</EndDate> 
       <Quantity>3.00</Quantity> 
       <Summary>3.00 hour(s) per week, every week, starting 06-Sep-2013 and ending 27-Sep-2013</Summary> 
       <AdditionalDetails>go to side door, call before visiting. Visit in morning. 
        Authorizing CC: Williamson, Fiona</AdditionalDetails> 
       <Type>Weekly</Type> 
       <RecurrenceTimes>0</RecurrenceTimes> 
       <Interval>1</Interval> 
       <RecurrenceNumber>0</RecurrenceNumber> 
       <RecurrencePeriod>0</RecurrencePeriod> 
       <NumberOfHoursPerVisit>0.00</NumberOfHoursPerVisit> 
       <ReasonForChange /> 
       <FrequencyId>ABC44cac-7319-e311-8472-00155d051350</FrequencyId> 
       <ExternalSystemId>923C56CC-6532-4A3A-A071-3474F679602C</ExternalSystemId> 
      </CCMFrequency> 
      <ChangeRequestStatusName>Approved</ChangeRequestStatusName> 
     </CancelVisit> 
     <ChangedFrequency> 
      <EndDate>2013-09-09</EndDate> 
      <CCMFrequency xmlns="http://air-ca.com"> 
       <Version>0</Version> 
       <UnitOfService>Hours</UnitOfService> 
       <PreferredTime /> 
       <StartDate>2013-09-06</StartDate> 
       <EndDate>2013-09-27</EndDate> 
       <Quantity>3.00</Quantity> 
       <Summary>3.00 hour(s) per week, every week, starting 06-Sep-2013 and ending 27-Sep-2013</Summary> 
       <AdditionalDetails>go to side door, call before visiting. Visit in morning. 
        Authorizing CC: Williamson, Fiona</AdditionalDetails> 
       <Type>Weekly</Type> 
       <RecurrenceTimes>0</RecurrenceTimes> 
       <ReasonForChange /> 
       <FrequencyId>fca44cac-7319-e311-8472-00155d051350</FrequencyId> 
       <ExternalSystemId>923C56CC-6532-4A3A-A071-3474F679602C</ExternalSystemId> 
      </CCMFrequency> 
      <ChangeRequestStatusName>Denied</ChangeRequestStatusName> 
      <ChangeRequestStatusCode>D</ChangeRequestStatusCode> 
      <ChangeRequestType>Update Frequency End Date</ChangeRequestType> 
     </ChangedFrequency> 
     <ChangedFrequency> 
      <EndDate>2013-09-09</EndDate> 
      <CCMFrequency xmlns="http://air-ca.com"> 
       <Version>0</Version> 
       <UnitOfService>Hours</UnitOfService> 
       <PreferredTime /> 
       <StartDate>2013-09-06</StartDate> 
       <EndDate>2013-09-27</EndDate> 
       <Quantity>3.00</Quantity> 
       <Summary>3.00 hour(s) per week, every week, starting 06-Sep-2013 and ending 27-Sep-2013</Summary> 
       <AdditionalDetails>go to side door, call before visiting. Visit in morning. 
        Authorizing CC: Williamson, Fiona</AdditionalDetails> 
       <Type>Weekly</Type> 
       <RecurrenceTimes>0</RecurrenceTimes> 
       <ReasonForChange /> 
       <FrequencyId>fca44cac-7319-e311-8472-00155d051350</FrequencyId> 
       <ExternalSystemId>923C56CC-6532-4A3A-A071-3474F679602C</ExternalSystemId> 
      </CCMFrequency> 
      <ChangeRequestStatusName>Denied</ChangeRequestStatusName> 
      <ChangeRequestStatusCode>D</ChangeRequestStatusCode> 
      <ChangeRequestType>Update Frequency End Date</ChangeRequestType> 
     </ChangedFrequency> 
    </ServiceChanges> 

輸出所需 在上述XML,在第一CancelVist標籤的FrequencyID(fca44cac-7319-e311-8472-00155d051350)與第三ChangedFrequency標籤相匹配。現在我需要將它們組合在一起。 有可能所有標籤都具有相同的頻率ID。

輸出將首先顯示取消訪問和更改頻率。在上例 第一個和第三個標籤將被組合在一起,第二個和第四個標籤將被組合在一起。

我需要一個XSLT,任何幫助將非常感激。

問候

盟友

+0

您能否提供所需輸出示例 - 因爲您的語言有點模糊(在討論xml轉換時不常見) – dav1dsm1th

+0

需要xslt 1嗎? (XSLT 2中的分組通常更容易,爲此,XSLT 2具有特定的xsl:for-each-group指令) –

+0

如果可能,我需要XSLT 1 ....... – Ally

回答