I have the following XML coming from a SharePoint control. I would like to transform using XSLT to produce a nested ul>li list. But I am having problem as I iterate each row, the primary folder repeats for each row, rather than making one primary Folder node and adding values of Menu_Display_name underneath that node to mimic a treeview... My XML is like:
<dsQueryResponse>
<NewDataSet>
<Row DOMAIN_USERNAME="someUser" PRIMARY_FOLDER="XYZ CORP HR TIME SELF SERVICE" SECONDARY_FOLDER="Time" MENU_DISPLAY_NAME="Create Timecard"></Row>
<Row DOMAIN_USERNAME="someUser" PRIMARY_FOLDER="XYZ CORP HR TIME SELF SERVICE" SECONDARY_FOLDER="Time" MENU_DISPLAY_NAME="Recent Timecards"></Row>
<Row DOMAIN_USERNAME="someUser" PRIMARY_FOLDER="XYZ CORP HR TIME SELF SERVICE" SECONDARY_FOLDER="Time" MENU_DISPLAY_NAME="Templates"></Row>
<Row DOMAIN_USERNAME="someUser" PRIMARY_FOLDER="XYZ CORP HR TIME SELF SERVICE" SECONDARY_FOLDER="Time" MENU_DISPLAY_NAME="Timecard Search"></Row>
<Row DOMAIN_USERNAME="someUser" PRIMARY_FOLDER="XYZ CORP EXP ENTRY" SECONDARY_FOLDER="" MENU_DISPLAY_NAME="Expenses Home"></Row>
<Row DOMAIN_USERNAME="someUser" PRIMARY_FOLDER="XYZ HR EMP SELF SERVICE" SECONDARY_FOLDER="" MENU_DISPLAY_NAME="Accommodation Request"></Row>
<Row DOMAIN_USERNAME="someUser" PRIMARY_FOLDER="XYZ HR EMP SELF SERVICE" SECONDARY_FOLDER="" MENU_DISPLAY_NAME="Additional Personal Information" ></Row>
<Row DOMAIN_USERNAME="someUser" PRIMARY_FOLDER="XYZ HR EMP SELF SERVICE" SECONDARY_FOLDER="" MENU_DISPLAY_NAME="All Actions Awaiting Your Attention"></Row>
<Row DOMAIN_USERNAME="someUser" PRIMARY_FOLDER="XYZ HR EMP SELF SERVICE" SECONDARY_FOLDER="" MENU_DISPLAY_NAME="Appraisals"></Row>
</NewDataSet>
</dsQueryResponse>
my "Poor man's attempt" at XSL is like this:
<xsl:template name="dvt_1.body">
<xsl:param name="Rows" />
<xsl:param name="FirstRow" />
<xsl:param name="LastRow" />
<ul>
<xsl:for-each select="$Rows">
<xsl:if test="position() >= $FirstRow and position() <= $LastRow">
<xsl:call-template name="dvt_1.rowview" />
</xsl:if>
</xsl:for-each>
</ul>
</xsl:template>
<xsl:template name="dvt_1.rowview">
<li class="isFolder isExpanded">
<xsl:value-of select="@PRIMARY_FOLDER" />
<xsl:choose>
<xsl:when test="@SECONDARY_FOLDER != ''">
<ul>
<li class="isFolder isExpanded">
<xsl:value-of select="@SECONDARY_FOLDER" />
<ul>
<li><xsl:value-of select="@MENU_DISPLAY_NAME" /></li>
</ul>
</li>
</ul>
</xsl:when>
<xsl:otherwise>
<ul>
<li><xsl:value-of select="@MENU_DISPLAY_NAME" /></li>
</ul>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:template>
And my desired xsl output is like this:
<div id="navigator">
<ul>
<li class="isFolder isExpanded">
XYZ CORP HR TIME SELF SERVICE
<ul>
<li class="isFolder isExpanded">
Time
<ul>
<li><a href="#" target="_tab">Create Timecard</a></li>
<li><a href="#" target="_tab">Recent Timecards</a></li>
<li><a href="#" target="_tab">Templates</a></li>
<li><a href="#" target="_tab">Timecard Search</a></li>
</ul>
</li>
</ul>
</li>
<li class="isFolder isExpanded">
XYZ CORP EXP ENTRY
<ul>
<li><a href="#" target="_tab">Expense Home</a></li>
</ul>
</li>
<li class="isFolder isExpanded">
XYZ HR EMP SELF SERVICE
<ul>
<li><a href="#" target="_tab">Accommodation Request</a></li>
<li><a href="#" target="_tab">Additional Personal Information</a></li>
<li><a href="#" target="_tab">All Actions Awaiting Your Attention</a></li>
<li><a href="#" target="_tab">Appraisals</a></li>
</ul>
</li>
</ul>
</div>
Can someone please help me achieve this using xslt?