我需要做相当简单的事情来迭代我的 XML 中的元素(在 XML 下有更多解释)
<form>
<field index="1" name="field_X_1" group="firstGroup" type="String">
<value>Value of Field X 1 of first group</value>
</field>
<field index="1" name="field_Y_1" group="firstGroup" type="String">
<value>Value of Field Y 1 of first group</value>
</field>
<field index="2" name="field_X_2" group="firstGroup" type="String">
<value>Value of Field X 2 of first group</value>
</field>
<field index="2" name="field_Y_2" group="firstGroup" type="String">
<value>Value of Field Y 2 of first group</value>
</field>
<field index="1" name="field_A_1" group="secondGroup" type="String">
<value>Value of Field A 1 of second group</value>
</field>
<field index="1" name="field_B_1" group="secondGroup" type="String">
<value>Value of Field B 1 of second group</value>
</field>
<field index="2" name="field_A_2" group="secondGroup" type="String">
<value>Value of Field A 2 of second group</value>
</field>
<field index="2" name="field_B_2" group="secondGroup" type="String">
<value>Value of Field B 2 of second group</value>
</field>
</form>
现在我正在遍历 firstGroup 的所有字段,每次我发现索引已更改(通过将索引与同级索引进行比较)我添加换行符)。问题是我只需要迭代索引(但仍然保持 firstGroup 和 secondGroup 之间的区别)。
我的输出应该看起来像
Value of Field X 1 of first group, Value of Field Y 1 of first group
Value of Field X 2 of first group, Value of Field Y 2 of first group
Value of Field A 1 of second group, Value of Field B 1 of second group
Value of Field A 2 of second group, Value of Field B 2 of second group
etc
我的 XSL 现在看起来像
<xsl:for-each select='/form/field[@group="firstGroup"]'>
<xsl:sort select="@index" order="ascending"></xsl:sort>
<xsl:if test='preceding-sibling::*[@group="firstGroup"][1]/@index != @index and count(preceding-sibling::*) != 0 '>
<xsl:text>
</xsl:text>
</xsl:if>
<xsl:value-of select="//field[@name=concat('field_X_', @index,')]/value"/>
<xsl:value-of select="//field[@name=concat('field_Y_', @index,')]/value"/>
</xsl:for-each>
<!-- Differente iteration for second group-->
<xsl:text>
</xsl:text>
<xsl:for-each select='/form/field[@group="firstGroup"]'>
<xsl:sort select="@index" order="ascending"></xsl:sort>
<xsl:if test='preceding-sibling::*[@group="firstGroup"][1]/@index != @index and count(preceding-sibling::*) != 0 '>
<xsl:text>
</xsl:text>
</xsl:if>
<xsl:value-of select="//field[@name=concat('field_A_', @index,')]/value"/>
<xsl:value-of select="//field[@name=concat('field_B_', @index,')]/value"/>
</xsl:for-each>