अगर बेस कोड में 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 का उपयोग कर सकता हूं कि किसका उपयोग करना है। लेकिन मैं यह नहीं समझ सकता कि कैसे।

0
Alexander Lykke Pedersen 7 मई 2019, 11:56

1 उत्तर

सबसे बढ़िया उत्तर

प्रासंगिक तत्व 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

0
Martin Honnen 7 मई 2019, 09:30