0

我对 XSLT 世界很陌生,并试图解决下面提到的 XML 中的分组问题。我有以 ServiceChanges 开头的相同 XML 作为根标记。在根标签下,我可以有零个或多个 CancelVisit 和 ChangedFrequency 标签。在每个 Tag 中都有一个公共字段 FrequencyId。现在我的任务是根据 Common FrequencyID 将 CancelVisit 和 ChangedFrequency 标签组合在一起(如果有的话),否则所有标签都将被视为独立的。

示例 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 ,任何帮助将不胜感激。

问候

盟国

4

1 回答 1

1

Muenchian 分组是您正在寻找的。看看XSLT 1.0 Group Byhttp://jenitennison.com/xslt/grouping/muenchian.html

于 2013-10-22T08:44:42.607 回答