У меня проблемы с созданием свернутых групп, когда нужные мне ключи можно повторять по группам из моего входного файла.Я использую метод muenchian для группировки, так как я застрял с xslt 1.0, и я не могу изменить схему ввода.
<groups>
<group id="1">
<members>
<member name="A">
<udf @name="key">1</customId>
</member>
<member name="B">
<udf @name="key">1</customId>
</member>
</members>
</group>
<group id="2">
<members>
<member name="C">
<udf @name="key">1</customId>
</member>
<member name="D">
<udf @name="key">2</customId>
</member>
<member name="E">
<udf @name="key">3</customId>
</member>
</members>
</group>
</groups>
Вывод, который я хочу произвести:
<group id="1">
<member key="1" />
</group>
<group id="2">
<member key="1" />
<member key="2" />
<member key="3" />
</group>
Я также выполняю другую обработку для каждого элемента, но это тангенциально.
У меня есть шаблон, который запускает цикл и генерирует ключ:
<xsl:tempalte name="process">
<xsl:for-each select="groups/group">
<xsl:call-template name="getMembers"/>
</xsl:for-each>
</xsl:tempalte>
<xsl:key name="keyId" match="member" use="udf/@name[.='key']/.."/>
<xsl:template name="getMembers>
<xsl:for-each select="members/member[generate-id() = generate-id(key('keyId',udf/@name[.='key']/..))]">
<!-- emits the grouped tags. -->
</xsl:for-each>
</xsl:template>
Пока что с этим преобразованием я получаю:
<group id="1">
<member key="1" />
</group>
<group id="2">
<member key="2" />
<member key="3" />
</group>
... вы увидите его недостающий ключ 1 из группы 2. Итак, я не понимаю, почемуВо второй раз, когда вызывается шаблон, функция генерирования идентификатора не генерирует новый уникальный ключ для значения «1», хотя я вызываю функцию генерации идентификатора в контексте, который, как я думал, группы 2.