如何修复 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>

我发现我可以使用 ab 来判断使用哪个。但我想不通。

相关元素是 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>

https://xsltfiddle.liberty-development.net/pPzifpK