使用XSLT 1.0过滤,分组,计算和选择XML中的特定节点

时间:2016-09-01 15:23:38

标签: xml xslt xslt-1.0 muenchian-grouping

我有一些看起来有点像这样的XML。

<Dealer>
  <Vehicle>
    <Model>KA</Model>
    <Series>Type A</Series>
    <Price>1000.00</Price>
  </Vehicle>
  <Vehicle>
    <Model>KA</Model>
    <Series>Type C</Series>
    <Price>1400.00</Price>
  </Vehicle>
  <Vehicle>
    <Model>KA</Model>
    <Series>Type A</Series>
    <Price>1100.00</Price>
  </Vehicle>
  <Vehicle>
    <Model>FOCUS</Model>
    <Series>Type B</Series>
    <Price>5000.00</Price>
  </Vehicle>
  <Vehicle>
    <Model>FIESTA</Model>
    <Series>Type A</Series>
    <Price>6000.00</Price>
  </Vehicle>
</Dealer>

我要做的是选择1个特定型号(EG:KA)然后将系列分组到一个不同的列表(没有重复),计算系列中有多少,但只显示最便宜的,使用XSLT 1.0。

EG。我的出局看起来像这样:

KA Type A 2 in stock starting from 1000.00
KA Type C 1 in stock starting from 1400.00  

我一直在关注Muenchian分组方法,但似乎无法将其与我想要实现的其他事情结合起来。

这是我在下面的尝试。我的想法是,然后只显示每组IE中的第一项。最便宜的,并以某种方式计算每个组。

<xsl:strip-space elements="*"/>

<xsl:template match="/Dealer">
   <xsl:apply-templates select="Vehicle[Model = 'KA']"/>
</xsl:template>

<xsl:key name="fSeries" match="Vehicle" use="Series" />
<xsl:template match="Vehicle">
   <xsl:for-each select="Vehicle[count(. | key('fSeries', Series)[1]) = 1]">
      <xsl:sort select="Price" />   
      <xsl:for-each select="key('fSeries', Series)">
         <xsl:sort select="Price" />
         <xsl:value-of select="Model" />&#32;<xsl:value-of select="Series" />&#32;<xsl:value-of select="Price" /><br />
      </xsl:for-each>
   </xsl:for-each>
</xsl:template> 

任何帮助都会非常好。感谢。

1 个答案:

答案 0 :(得分:1)

您有几个问题,第一个问题是Vehicle不是Vehicle的孩子 - 所以从匹配{{1}的模板的上下文中调用<xsl:for-each select="Vehicle...">不会做任何事情。

另一件事是你的钥匙与系列中的所有车辆相匹配,无论型号如何。

以这种方式尝试:

XSLT 1.0

Vehicle