I have an xml datasource which looks like this:
<dsQueryResponse>
<Department>
<Rows>
<Row dept="HR" state="NY" region="East"/>
<Row dept="HR" state="NJ" region="East"/>
<Row dept="SD" state="NY" region="East"/>
<Row dept="MM" state="NY" region="East"/>
<Row dept="SD" state="NJ" region="East"/>
<Row dept="SD" state="CO" region="West"/>
<Row dept="MM" state="CO" region="West"/>
</Rows>
</Department>
</dsQueryResponse>
My XSLT looks like this:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="no"/>
<xsl:decimal-format NaN=""/>
<xsl:param name="DeptQS">East</xsl:param>
<xsl:variable name="deptRows" select="/dsQueryResponse/Department/Rows/Row[@region = $DeptQS]"/>
<xsl:template match="/">
<xsl:if test="count($deptRows) > 0">
<xsl:call-template name="deptList"/>
</xsl:if>
</xsl:template>
<xsl:template name="deptList">
<xsl:for-each select="$deptRows">
<!-- process unique depts-->
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
I want to get all the departments in the region written out. The code I have now will write out duplicate departments. But how can I write out the department for the region only once?
Thanks!
You haven't shown your desired output. But in XSLT 2.0, you could do something like this:
<xsl:template match="Rows">
<xsl:for-each-group select="Row" group-by="@region">
<region name="{current-grouping-key()}">
<xsl:for-each-group select="current-group()" group-by="@dept">
<dept name="{current-grouping-key()}">
<xsl:for-each select="current-group()">
<state name="{@state}"/>
</xsl:for-each>
</dept>
</xsl:for-each-group>
</region>
</xsl:for-each>
</xsl:template>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With