Исходя из общего входного XML, в общем выходном XML есть некоторые расхождения.Будет трудно перечислить их в комментариях, следовательно, включив их в решение.
- Значения, соответствующие элементу
<country>
из входного XML, не совпадают с несколькими <Key id="">
элементами вывода. <ProductST>
имеет единственный дочерний элемент <Key>
в выводе, атрибут которого id
имеет значение SE
, которого нет во входном XML. <ProductPrice>
имеет правильное количество дочерних <Key>
элементов, чьи значения атрибута id
соответствуют значениям <country>
из входных данных в 3 из 4 экземпляров.
Предполагается, что между данными имеется несоответствиеПри использовании входного XML и выходного XML вы можете попробовать приведенное ниже решение XSLT, которое должно дать достаточно точное представление о группировке значений.Это решение основано на входном XML и, следовательно, не будет соответствовать общему выходному XML.
<xsl:key name="kId" match="data" use="ID" />
<xsl:template match="result">
<data>
<xsl:for-each select="data[generate-id() = generate-id(key('kId', ID)[1])]">
<Product>
<Fields>
<ID><xsl:value-of select="key('kId', ID)/ID" /></ID>
<ProductST>
<Key>
<xsl:attribute name="id">
<xsl:value-of select="'SE'" />
</xsl:attribute>
<Value><xsl:value-of select="key('kId', ID)/value" /></Value>
</Key>
</ProductST>
<ProductPrice>
<xsl:for-each select="key('kId', ID)">
<Key>
<xsl:attribute name="id">
<xsl:value-of select="country" />
</xsl:attribute>
<Value><xsl:value-of select="price" /></Value>
</Key>
</xsl:for-each>
</ProductPrice>
</Fields>
</Product>
</xsl:for-each>
</data>
</xsl:template>
Это создает следующий вывод
<data>
<Product>
<Fields>
<ID>7705379</ID>
<ProductST>
<Key id="SE">
<Value>54</Value>
</Key>
</ProductST>
<ProductPrice>
<Key id="lv">
<Value>24.99</Value>
</Key>
<Key id="fi">
<Value>24.99</Value>
</Key>
</ProductPrice>
</Fields>
</Product>
<Product>
<Fields>
<ID>7111111</ID>
<ProductST>
<Key id="SE">
<Value>503</Value>
</Key>
</ProductST>
<ProductPrice>
<Key id="fi">
<Value>19.99</Value>
</Key>
<Key id="se">
<Value>119.99</Value>
</Key>
</ProductPrice>
</Fields>
</Product>
</data>
РЕДАКТИРОВАТЬ: Решение обновлено в соответствии с комментарием.