Первое сообщение после просмотра огромных предложений сообщества.Инкрементер в приглашениях для каждой группы
У меня есть три поля в XSLT 2.0, все на одном уровне (плечи, колени и пальцы на ногах). Мне нужно вывести суммы пальцев на основе уникальных комбинаций плеч и коленей, поэтому я создал две вложенные для каждой группы. На каждом выходе мне также нужно вывести инкремент от 1 до нескольких уникальных комбинаций плеч и колен.
Этот инкремент - это то место, где у меня возникают проблемы. Самое близкое, что я пришел, - это вызвать функцию position(), но если я назову ее в самой внутренней группе, счетчик сбрасывается на каждом уникальном плече. Если я назову это в самой внешней группе, каждое колено внутри уникального плеча получит то же значение, то оно сбрасывается на каждом уникальном плече. Если я назову его вне групп полностью, он никогда не пройдет. Я также пытался использовать xsl: число, ключи и т. Д., Но безрезультатно. В этом случае правильное количество строк все еще печатается, но значения приращения смотрят на отдельные, негрупповые значения.
Я прочитал одно предложение о «туннелировании» значений между шаблонами, но я не смог заставить это работать, главным образом потому, что я не думаю, что правильно вызываю шаблоны (с этими полями, уровень, а не родительский-ребенок). Любые мысли о том, как эта работа работает для каждой группы или иначе? Спасибо заранее.
Пример XML:
<bodies>
<parts>
<shoulders>shoulders1</shoulders>
<knees>knees1</knees>
<toes>1</toes>
</parts>
<parts>
<shoulders>shoulders2</shoulders>
<knees>knees2</knees>
<toes>2</toes>
</parts>
<parts>
<shoulders>shoulders1</shoulders>
<knees>knees2</knees>
<toes>10</toes>
</parts>
<parts>
<shoulders>shoulders2</shoulders>
<knees>knees1</knees>
<toes>10</toes>
</parts>
<parts>
<shoulders>shoulders1</shoulders>
<knees>knees1</knees>
<toes>9</toes>
</parts>
<parts>
<shoulders>shoulders2</shoulders>
<knees>knees2</knees>
<toes>8</toes>
</parts>
</bodies>
Пример XSLT:
<xsl:stylesheet exclude-result-prefixes="xsl" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xmlns:this="urn:this-stylesheet" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsl:template match="/">
<xsl:for-each-group select="bodies/parts" group-by="shoulders">
<xsl:for-each-group select="current-group()" group-by="knees">
<xsl:value-of select="shoulders"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="knees"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="sum(current-group()/toes)"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="position()"/>
<xsl:text>. </xsl:text>
</xsl:for-each-group>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
Результирующий выход:
shoulders1, knees1, 10, 1. shoulders1, knees2, 10, 2. shoulders2, knees2 , 10, 1. плечи2, колени1, 10, 2.
Желаемый результат:
shoulders1, knees1, 10, 1. shoulders1, knees2, 10, 2. shoulders2, knees2, 10, 3. shoulders2, knees1, 10, 4.