我正试图根据两个字段中的一个字段对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
按以下表达式排序:
concat(
substring(OffCampusLocation, 1, string-length(OffCampusLocation) * (OffCampus='Y')),
substring(OrganisationName, 1, string-length(OrganisationName) * (OffCampus='N'))
)