如何在XSLT中的一个元素中将XPTY0004错误2项从XML修复为XML

时间:2019-05-07 08:56:34

标签: xml xslt-3.0

如果基本代码中有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>

我发现我可以使用ab来告诉使用哪个。但我不知道怎么办。

1 个答案:

答案 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>

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