Has anyone ever faced this?:
I'm trying to automatically generate and index/tableofcontents based on categories applied to each entry. Here's my example XML:
<root>
<row pagename="page1" cat1="a" cat2="b" cat3="c" cat4="d" />
<row pagename="page2" cat1="b" cat2="f" cat3="c" cat4="" />
<row pagename="page3" cat1="c" cat2="f" cat3="a" cat4="" />
<row pagename="page4" cat1="f" cat2="e" cat3="a" cat4="g" />
<row pagename="page5" cat1="g" cat2="" cat3="" cat4="" />
<row pagename="page6" cat1="c" cat2="d" cat3="b" cat4="" />
</root>
The output I'm trying to get is a list by category, such as:
a
page1
page3
page4
b
page1
page2
page6
c
page1
page2
page3
page6
d
page1
page6
e
page4
f
page2
page3
page4
g
page4
page5
I'm using MSXML4 to process (less said the better...) and unfortunately am stuck with XSLT1.0.
Here's the XSL I've written so far:
<xsl:key name="indexbytopic" match="/root/row" use="@cat1 | @cat2 | @cat3 | @cat4"/>
<xsl:template match="/root">
<ul>
<xsl:for-each select="row[count(. | key('indexbytopic', @cat1 | @cat2 | @cat3 | @cat4)[1]) = 1]">
<xsl:sort select="@cat1 | @cat2 | @cat3 | @cat4" />
<li><xsl:value-of select="@cat1 | @cat2 | @cat3 | @cat4" />
<ul>
<xsl:call-template name="items" />
</ul></li>
</xsl:for-each>
</ul>
</div>
</div>
</xsl:template>
<xsl:template name="items">
<xsl:for-each select="key('indexbytopic', @cat1 | @cat2 | @cat3 | @cat4)">
<xsl:sort select="." />
<li><xsl:value-of select="@pagename" /></li>
</xsl:for-each>
</xsl:template>
If someone could tell me where I'm going wrong, or give me some suggestions I'd appreciate it.
Thanks,
Booze
I'm trying to automatically generate and index/tableofcontents based on categories applied to each entry. Here's my example XML:
<root>
<row pagename="page1" cat1="a" cat2="b" cat3="c" cat4="d" />
<row pagename="page2" cat1="b" cat2="f" cat3="c" cat4="" />
<row pagename="page3" cat1="c" cat2="f" cat3="a" cat4="" />
<row pagename="page4" cat1="f" cat2="e" cat3="a" cat4="g" />
<row pagename="page5" cat1="g" cat2="" cat3="" cat4="" />
<row pagename="page6" cat1="c" cat2="d" cat3="b" cat4="" />
</root>
The output I'm trying to get is a list by category, such as:
a
page1
page3
page4
b
page1
page2
page6
c
page1
page2
page3
page6
d
page1
page6
e
page4
f
page2
page3
page4
g
page4
page5
I'm using MSXML4 to process (less said the better...) and unfortunately am stuck with XSLT1.0.
Here's the XSL I've written so far:
<xsl:key name="indexbytopic" match="/root/row" use="@cat1 | @cat2 | @cat3 | @cat4"/>
<xsl:template match="/root">
<ul>
<xsl:for-each select="row[count(. | key('indexbytopic', @cat1 | @cat2 | @cat3 | @cat4)[1]) = 1]">
<xsl:sort select="@cat1 | @cat2 | @cat3 | @cat4" />
<li><xsl:value-of select="@cat1 | @cat2 | @cat3 | @cat4" />
<ul>
<xsl:call-template name="items" />
</ul></li>
</xsl:for-each>
</ul>
</div>
</div>
</xsl:template>
<xsl:template name="items">
<xsl:for-each select="key('indexbytopic', @cat1 | @cat2 | @cat3 | @cat4)">
<xsl:sort select="." />
<li><xsl:value-of select="@pagename" /></li>
</xsl:for-each>
</xsl:template>
If someone could tell me where I'm going wrong, or give me some suggestions I'd appreciate it.
Thanks,
Booze