这是我的xslt
true
我希望这种格式的输出第一个CarrierName应该以' **'开头。最后的'和'其余的应修改为','所有CarrierName都没有向Kingfisher提供
输出:** CityFlyer,中华航空公司和印度航空公司
我的实际输入如下
fnmatch("/*", "/foo.txt"); //=> true
答案 0 :(得分:0)
首先,我建议您使用Muenchian grouping获取不同的运营商列表(或者,如果您的处理器支持它,使用扩展功能),而不是检查前一个兄弟姐妹的笨拙(和低效)方法
一旦你有了,其余的都是微不足道的:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:key name="seg-by-carier" match="BookingFlightSegment" use="CarrierName" />
<xsl:template match="/Response">
<xsl:text>**</xsl:text>
<xsl:for-each select="FlightSegment/BookingFlightSegment[count(. | key('seg-by-carier', CarrierName)[1]) = 1]">
<xsl:value-of select="CarrierName" />
<xsl:choose>
<xsl:when test="position()=last() - 1"> and </xsl:when>
<xsl:when test="position()!=last()">, </xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
请注意,在您尝试时,position()
函数会返回整个所选节点集中当前节点的位置,包括重复项。因此,在xsl:if
条件下,测试position()=last()
永远不会返回true(除非没有重复)。