如果基本代码中有2个人,则我需要为2个人组成2个小组。
在value-of
,代码混乱了。如果只有一个人可以罚款,但是当有两个元素的名称相同时,会显示错误 XPTY0004 。
<reqpers>
<person man="a"/>
<esttime>8 minutes</esttime>
<person man="b"/>
<esttime>5 minutes</esttime>
</reqpers>
<xsl:template match="reqpers">
<xsl:element name="reqPersons">
<xsl:for-each-group select="*" group-starting-with="person">
<xsl:element name="person">
<xsl:element name="estimatedTime">
<xsl:attribute name="unitOfMeasure">
<xsl:text>min</xsl:text>
</xsl:attribute>
<xsl:value-of select="substring-before(../esttime, ' ')" />
</xsl:element>
</xsl:element>
</xsl:for-each-group>
</xsl:element>
</xsl:template>
<person man="a">
<estimatedTime unitOfMeasure="min">8</estimatedTime>
</person>
<person man="b">
<estimatedTime unitOfMeasure="min">5</estimatedTime>
</person>
a
和b
来告诉使用哪个。但我不知道怎么办。答案 0 :(得分:0)
相关元素是current-group()
序列的一部分,因此如果样本中只有两个不同的元素,则可以使用current-group()[2]
从中选择它,或者使用current-group()[self::esttime]
通过名称选择:
<xsl:template match="reqpers">
<xsl:copy>
<xsl:for-each-group select="*" group-starting-with="person" expand-text="yes">
<person man="{@man}">
<estimatedTime unitOfMeasure="min">{substring-before(current-group()[self::esttime], ' ')}</estimatedTime>
</person>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>