Context: starting to learn xslt, and having an issue on grouping/keys
so, I have this input XML:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="getInfoMinimal.xml" type="text/xsl" ?>
<domaines>
<domaine Name="someDomain">
<application name="someApplication1">
<module id="0001">
<env-entry>ejb/test</env-entry>
<requirement>Queue1</requirement>
</module>
<module id="0002">
<env-entry>ejb/notherTest</env-entry>
<requirement>Queue1</requirement>
</module>
<module id="0003">
<env-entry>ejb/notherTest2</env-entry>
<requirement>Datasource1</requirement>
</module>
<module id="0004">
<env-entry>ejb/notherTest3</env-entry>
<requirement>Datasource1</requirement>
</module>
</application>
<application name="someApplication2">
<module id="0001">
<env-entry>ejb/test</env-entry>
<requirement>Queue1</requirement>
</module>
<module id="0002">
<env-entry>ejb/notherTest</env-entry>
<requirement>Queue1</requirement>
</module>
<module id="0003">
<env-entry>ejb/notherTest2</env-entry>
<requirement>Datasource1</requirement>
</module>
<module id="0004">
<env-entry>ejb/notherTest3</env-entry>
<requirement>Datasource1</requirement>
</module>
<module id="0001">
<env-entry>ejb/test</env-entry>
<requirement>Queue1</requirement>
</module>
<module id="0002">
<env-entry>ejb/notherTest</env-entry>
<requirement>Queue1</requirement>
</module>
<module id="0003">
<env-entry>ejb/notherTest2</env-entry>
<requirement>Datasource1</requirement>
</module>
<module id="0004">
<env-entry>ejb/notherTest3</env-entry>
<requirement>Datasource3</requirement>
</module>
</application>
</domaine>
</domaines>
and this xlst file(getInfoMinimal.xml):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://ift.tt/tCZ8VR" xmlns="http://ift.tt/lH0Osb">
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:key name="modules-by-requirement" match="module" use="requirement" />
<xsl:template match="/">
<html>
<head>
<title><xsl:value-of select="/domaines/domaine/@Name"/></title>
</head>
<body>
<xsl:for-each select="/domaines/domaine/application">
<h1><xsl:value-of select="./@name"/></h1>
<xsl:for-each select="module[count(. | key('modules-by-requirement', requirement)[1]) = 1]">
<!--<xsl:sort select="requirement" />-->
<xsl:value-of select="requirement" /><br />
<xsl:for-each select="key('modules-by-requirement', requirement)">
<!--<xsl:sort select="env-entry" />
<xsl:value-of select="env-entry" /> (<xsl:value-of select="blabla" />)<br />-->
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
I'm trying to render it to a html page that lists per application all the requirements that its modules have.
rules implied by the input XML:
1 application can have 1 or more modules
1 module can have 1 or more unique requirements
multiple modules can have the same requirements
multiple applications can not have the same modules
multiple applications can have the same requirements.
Current result:
someApplication1
Queue1
Datasource1
someApplication2
- Datasource3
wanted result:
someApplication1
Queue1
Datasource1
someApplication2
Queue1
Datasource1
- Datasource3
as you can see, the Queue1 and Datasource1 are not in the 'someApplication2' result, even though I want them to be.
Any and all help will be appreciated
No comments:
Post a Comment