如何让前兄弟在xslt中工作

时间:2012-12-14 14:41:56

标签: xml xslt

鉴于此XML:

<Table>
  <ID>3589</ID>
  <Type>Change Request</Type>
  <Version>1</Version>
  <Summary>...</Summary>
</Table>
<Table>
  <ID>3596</ID>
  <Version>1</Version>
  <Type>Change Request</Type>
  <Summary>...</Summary>
</Table>
<Table>
  <ID>4818</ID>
  <Type>Bug</Type>
  <Version>1</Version>
  <Summary>...</Summary>
</Table>
<Table>
  <ID>4819</ID>
  <Type>Bug</Type>
  <Version>1</Version>
  <Summary>...</Summary>
</Table>
<Table>
  <ID>4820</ID>
  <Type>Bug</Type>
  <Version>2</Version>
  <Summary>...</Summary>
</Table>

我使用这个XSLT:

...
<xsl:for-each select="//Table[Version=$vn]">
  <xsl:sort select="Type" />
   <xsl:variable name="currentType" select="Type" />
   <xsl:if test="not($currentType=preceding-sibling::Table/Type)">
      <h2><xsl:value-of select="Type" /></h2>
   </xsl:if>
   <p><b><xsl:value-of select="ID" /></b>:<xsl:value-of select="Summary" /></p>
</xsl:for-each>
...

我需要使用哪种测试才能在更改时显示“类型”?我只想要第一次出现才能表现出来。现在,previous-sibling :: Table / Type总是指第一个'row'

转换是在C#中完成的。

1 个答案:

答案 0 :(得分:2)

这个怎么样:

<xsl:if test="not(preceding-sibling::Table[Version=$vn][Type=$currentType])">