Как исправить ошибки XPTY0004 2 элемента в одном элементе в XSLT из XML в XML - PullRequest
0 голосов
/ 07 мая 2019

Мне нужно сделать 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, чтобы сказать, что использовать.но я не могу понять, как.

1 Ответ

0 голосов
/ 07 мая 2019

Соответствующий элемент является частью последовательности 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

...