Я новичок, и я пытаюсь сгруппировать вход XML на основе аналогичной категории, используя XSLT 1.0. Вот вход xml, который содержит категорию и местоположение. Выходная группа должна сгруппировать все элементы с одинаковой категорией и перечислить уникальные местоположения:
<?xml version="1.0" ?>
<Data>
<Row>
<id>123</id>
<location>/example/games/data.php</location>
<category>gamedata</category>
</Row>
<Row>
<id>456</id>
<location>/example/games/data.php</location>
<category>gamedata</category>
</Row>
<Row>
<id>789</id>
<location>/example/games/score.php</location>
<category>gamedata</category>
</Row>
<Row>
<id>888</id>
<location>/example/games/title.php</location>
<category>gametitle</category>
</Row>
<Row>
<id>777</id>
<location>/example/games/title.php</location>
<category>gametitle</category>
</Row>
<Row>
<id>999</id>
<location>/example/score/title.php</location>
<category>gametitle</category>
</Row>
</Data>
Искать вывод как (перечислить только уникальное местоположение, сгруппированное по категории):
<project>
<item>
<data>
<category>gamedata</category>
<id>456</id>
<id>789</id>
<id>123</id>
<location>/example/games/data.php</location>
<location>/example/games/score.php</location>
</data>
<data> <category>gametitle</category>
<id>888</id>
<id>777</id>
<id>999</id>
<location>/example/games/title.php</location>
<location>/example/score/title.php</location>
</data>
</item></project>
Что я пробовал до сих пор:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="keyCategory" match="Row" use="category"/>
<xsl:template match="/">
<project xmlns="xyz.com">
<item >
<name lang="en">Example</name>
<xsl:for-each select="//Row[generate-id(.) = generate-id(key('keyCategory', category)[1])]">
<xsl:for-each select="key('keyCategory', category)">
<data>
<category><xsl:value-of select="category"/></category>
<id><xsl:value-of select="id"/></id>
<location><xsl:value-of select="location"/></location></data>
</xsl:for-each>
</xsl:for-each>
</item>
</project>
Что я на самом деле получаю:
<project>
<item>
<data>
<category>gamedata</category>
<id>456</id>
<location>/example/games/data.php</location>
</data>
<data>
<category>gamedata</category>
<id>789</id>
<location>/example/games/score.php</location>
</data>
<data>
<category>gamedata</category>
<id>789</id>
<location>/example/games/score.php</location>
</data>
<data>
<category>gamedata</category>
<id>123</id>
<location>/example/games/data.php</location>
</data>
<data>
<category>gametitle</category>
<id>888</id>
<location>/example/games/title.php</location>
</data>
<data>
<category>gametitle</category>
<id>777</id>
<location>/example/games/title.php</location>
</data>
<data>
<category>gametitle</category>
<id>999</id>
<location>/example/score/title.php</location>
</data>
</item></project>