如何修复 XSLT 中一个元素中的 XPTY0004 错误 2 项,从 XML 到 XML
How to fix XPTY0004 error 2 items in one element in XSLT from XML to XML
如果基本代码中有2个人,我需要为2个人创建2个组。
在 value-of
处代码混乱。如果只有一个人没问题,但是当有 2 个同名元素时,会显示错误 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
来判断使用哪个。但我想不通。
相关元素是 current-group()
序列的一部分,因此您可以 select 从那里使用 current-group()[2]
如果您的样本中只有两个不同的元素,或者current-group()[self::esttime]
到 select 的名称:
<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>
如果基本代码中有2个人,我需要为2个人创建2个组。
在 value-of
处代码混乱。如果只有一个人没问题,但是当有 2 个同名元素时,会显示错误 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
来判断使用哪个。但我想不通。
相关元素是 current-group()
序列的一部分,因此您可以 select 从那里使用 current-group()[2]
如果您的样本中只有两个不同的元素,或者current-group()[self::esttime]
到 select 的名称:
<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>