按两个字段之一排序

时间:2014-10-27 00:42:46

标签: sorting xslt xslt-1.0

我正在尝试按两个字段之一对XML节点集进行排序,条件是另一个字段中的值。

<xsl:for-each select="CampusCourseDeliveryItem">
    <xsl:sort select="OffCampus"/>
    <xsl:sort select="OrganisationName" />
    <xsl:sort select="OffCampusLocation"/>

<!-- code to display node goes here -->

我想要的是,如果OffCampus='Y'使用OffCampusLocation作为排序键,则使用OrganisationName

示例数据:

<CampusCourseDelivery>
    <CampusCourseDeliveryItem>
        <OrganisationName>Chicago</OrganisationName>
        <OffCampus>N</OffCampus>
        <OffCampusLocation></OffCampusLocation>
    </CampusCourseDeliveryItem>
    <CampusCourseDeliveryItem>
        <OrganisationName>London</OrganisationName>
        <OffCampus>Y</OffCampus>
        <OffCampusLocation>Detroit</OffCampusLocation>
    </CampusCourseDeliveryItem>
    <CampusCourseDeliveryItem>
        <OrganisationName>Seattle</OrganisationName>
        <OffCampus>Y</OffCampus>
        <OffCampusLocation>Berlin</OffCampusLocation>
    </CampusCourseDeliveryItem>
    <CampusCourseDeliveryItem>
        <OrganisationName>Adelaide</OrganisationName>
        <OffCampus>N</OffCampus>
        <OffCampusLocation>Ignore this value</OffCampusLocation>
    </CampusCourseDeliveryItem>
</CampusCourseDelivery>

预期排序顺序:

Adelaide
Berlin
Chicago
Detroit

1 个答案:

答案 0 :(得分:3)

按以下表达式排序:

concat(
substring(OffCampusLocation, 1, string-length(OffCampusLocation) * (OffCampus='Y')),
substring(OrganisationName, 1, string-length(OrganisationName) * (OffCampus='N'))       
)
相关问题