#asp.net #xml #xslt
#asp.net #xml #xslt
Вопрос:
у меня есть xml в структуре, подобной этой:
<RWFCriteria reportType="ProgramReview">
<item id="36" name="" value="9" type="Milestone" />
<item id="31" name="" value="9" type="Milestone" />
<item id="33" name="" value="11" type="Milestone" />
</RWFCriteria>
и нужно, чтобы это было преобразовано в:
<data>
<release id="9"> <milestone id="36" /> <milestone id="31" /> </release>
<release id="11"> <milestone id="33" /> </release>
</data>
как бы выглядел XSLT для этого преобразования?
Ответ №1:
Вам нужно сгруппировать элементы на основе их атрибута value. Если вы используете xslt 1, вы можете сделать это с помощью метода Мюнхиана, который будет выглядеть примерно так:
<xsl:key name="item-value" match="item" use="@value" />
<xsl:template match="/RWFCriteria">
<data>
<xsl:for-each select="item[count(. | key('item-value', @value)[1]) = 1]">
<release id="{@value}">
<xsl:for-each select="key('item-value', @value)">
<milestone id="{@id}" />
</xsl:for-each>
</release>
</xsl:for-each>
</data>
</xsl:template>
Комментарии:
1. @Alejandro Спасибо за исправление атрибутов
2. Никаких проблем. 1 за правильный ответ. (Кроме того, мне не нравятся вложенные
xsl:for-each
)3. @Alejandro Я тоже, обычно я бы перенес все в их собственный шаблон, но мне показалось, что так понятнее.