我有以下 XML:
<discrepancyModel>
<MissingSuppliers isMissingSuppliersCheckApplied="true">
<SnsCode value="str1234" mi="GRAA350RR" syst="29" subsys="2"
subsubsys="1" assy="XX" />
<SnsCode value="str1234" mi="GRAA350RR" syst="29" subsys="2"
subsubsys="3" assy="XX" />
<SnsCode value="str1234" mi="TRENTXWB" syst="28" subsys="1"
subsubsys="1" assy="XX" />
<SnsCode value="str1234" mi="TRENTXWB" syst="29" subsys="1"
subsubsys="1" assy="57" />
<SnsCode value="str1234" mi="TRENTXWC" syst="29" subsys="1"
subsubsys="1" assy="58" />
<SnsCode value="str1234" mi="TRENTXWD" syst="29" subsys="1"
subsubsys="1" assy="58" />
</MissingSuppliers>
</discrepancyModel>
预期的输出是:
在这里,我必须在表格行中显示每个 SNSCODE 的信息。如果 2 个或多个 SNSCODE 具有相同的 @mi 值,则 SNSCODE 仅写入一次,但其前面有多行(即第一列合并)
我被卡住的主要问题是我想要行的替代颜色,但我无法实现。我已经看到了所有早期的答案,但它们并没有解决我的问题。
我有以下 xslt 代码:
<table border="1">
<tr>
<th>Name (MI)</th>
<th>systemCode</th>
<th>subSystemCode</th>
<th>subSubSystemCode</th>
<th>assyCode</th>
</tr>
<xsl:for-each select="//SnsCode">
<xsl:variable name="tmp">
<xsl:value-of select="./@mi" />
</xsl:variable>
<xsl:if test="generate-id(.) = generate-id(key('stvalkey',$tmp)[1])">
<xsl:variable name="miNumber" select="count(key('stvalkey',$tmp))" />
<xsl:for-each select="//SnsCode[@mi=$tmp]">
<xsl:value-of select="count(preceding-sibling::SnsCode)" />
<tr>
<xsl:attribute name="class">
<xsl:if test="position() mod 2 = 0">
<xsl:value-of select="'odd'" />
</xsl:if>
</xsl:attribute>
<xsl:if test="position()=1">
<td>
<xsl:attribute name="rowspan">
<xsl:value-of select="$miNumber" />
</xsl:attribute>
<xsl:value-of select="$tmp" />
</td>
</xsl:if>
<td>
<xsl:value-of select="./@syst" />
</td>
<td>
<xsl:value-of select="./@subsys" />
</td>
<td>
<xsl:value-of select="./@subsubsys" />
</td>
<td>
<xsl:value-of select="./@assy" />
</td>
</tr>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</table>
此用于着色的代码是:
<xsl:attribute name="class">
<xsl:if test="position() mod 2 = 0">
<xsl:value-of select="'odd'"/>
</xsl:if>
</xsl:attribute>
问题是,如果我在循环中使用此代码,它不会为整行着色,它只会着色 mi 值内的第二行。
另一方面,如果在循环外使用此代码,那么我不会将元素的位置设为 1,2,3,4 ....但我得到的值为 1,3,5,6,因为有 2第一个值出现,第二个值出现 2 次,依此类推。
谁能建议在这种情况下如何着色?