2010-11-19 3 views
0

У меня есть 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

Вам необходимо сгруппировать элементы на основе их атрибута значения. Если вы используете XSLT 1 вы можете сделать это с помощью Muenchian метода, который будет выглядеть примерно так:

<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> 
+0

@Alejandro Благодаря фиксации атрибутов – Bronumski

+0

Нет проблем. +1 Для правильного ответа. (Кроме того, мне не нравятся вложенные 'xsl: for-each') – 2010-11-19 17:44:08

+0

@Alejandro Мне тоже, я бы обычно не подходил к их собственному шаблону, но я чувствовал, что это было яснее. – Bronumski

Смежные вопросы