使用xslt修改排序结果

时间:2015-10-14 19:50:45

标签: xml xslt xslt-1.0 xslt-2.0 ibm-datapower

在我的请求xml中有一个标记,其值在发送到Web服务时返回响应的名称列表。最初的要求是按字母顺序对名称进行排序,我使用xsl:sort函数实现。现在要求发生了一些变化,我无法弄清楚它的代码。请参阅下面的请求,排序响应和预期的响应。

Request:    <BillerName>Dir</BillerName>

Sorted Response:    <Name>AT Direct</Name>
                    <Name>Direct AV</Name>
                    <Name>Direct SV</Name>
                   <Name>The Direct AV</Name>

Expected Response: <Name>Direct AV</Name>
                   <Name>Direct SV</Name>
                   <Name>AT Direct</Name>
                   <Name>The Direct AV</Name>

所以基本上,以te请求销售的BillerName标签的值开头的名称首先出现,而其余的te排序名称则为10。

我该如何实现?

2 个答案:

答案 0 :(得分:2)

使用两个排序键,主要和次要:

<xsl:for-each select="Name">
  <xsl:sort select="not(starts-with(., $BillerName))"/>
  <xsl:sort select="."/>
  ...
</xsl:for-each>

这依赖于在真实之前知道错误排序。

答案 1 :(得分:0)

类似的东西:

<xsl:variable name="BillerName" select="BillerName"/>

<xsl:for-each select="Name[starts-with(., $BillerName)]">
    <xsl:sort/>
    <xsl:copy-of select="."/>
</xsl:for-each>

<xsl:for-each select="Name[not(starts-with(., $BillerName))]">
    <xsl:sort/>
    <xsl:copy-of select="."/>
</xsl:for-each>