2013-10-21 4 views
0

저는 XSLT 세계에 매우 익숙하며 아래의 XML에서 그룹화 문제를 해결하려고합니다. 루트 태그로 ServiceChanges로 시작하는 XML과 동일한 XML이 있습니다. 루트 태그 아래에서, 나는 0 개 이상의 CancelVisit 및 ChangedFrequency 태그를 가질 수 있습니다. 각 태그에는 공통 필드 인 FrequencyId가 있습니다. 이제는 공통 FrequencyID를 기반으로 CancelVisit 및 ChangedFrequency 태그를 함께 그룹화하는 것이 좋습니다. 그렇지 않으면 모두가 독립적으로 처리됩니다.XSLT에서 그룹화

샘플 XML 출력 위의 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> 

먼저 CancelVist 태그의 FrequencyID (fca44cac-7319-e311-8472-00155d051350)는 세 번째 ChangedFrequency 태그와 일치합니다. 이제 나는 그들을 하나로 묶을 필요가있다. 모든 태그가 동일한 빈도 ID를 가질 가능성이 있습니다.

출력에 처음으로 방문 취소 및 변경 빈도가 표시됩니다. 위의 예에서 첫 번째 및 세 번째 태그는 함께 그룹화되며 두 번째 및 네 번째 태그는 함께 그룹화됩니다.

저는 XSLT가 필요합니다. 어떤 도움이 필요하시면 정말 감사하겠습니다.

감사

앨리

+0

를 살펴 보자 - (XML 변환에 대해 이야기 할 때 드문 일이 아니다) 언어는 조금 모호으로 – dav1dsm1th

+0

는 XSLT 일을해야합니까? (이 목적을 위해 특정 xsl : for-each-group 명령이있는 XSLT 2에서는 일반적으로 그룹화가 더 쉽습니다.) –

+0

가능한 경우 XSLT 1이 필요합니다 ....... – Ally

답변