Re: [xsl] Making an FAQ page from XML

Subject: Re: [xsl] Making an FAQ page from XML
From: Kamal Bhatt <kbhatt@xxxxxxxxx>
Date: Mon, 12 Feb 2007 08:47:55 +1100
John Steel wrote:
Hi,

(Borderline newbie alert!)
Given this XML:

<faqlist xmlns:OTAMate="urn:schemas.otamate.com">
<faq>
 <q>Question One?</q>
 <a>Answer One</a>
</faq>
<faq>
 <q>Question Two?</q>
 <a>Answer Two.</a>
</faq>
<faq>
 <q>Question Three?</q>
 <a>Answer Three.</a>
</faq>
</faqlist>

I'm trying to make a page with all the questions on the top half which have links to the bottom half, like this:
1 Question 1
2 Question 2
...


1 Answer 1
2 Answer 2

I can do either the questions alone or the answers alone but can't figure how to split them this way. Heres as far as I got which just does the questions:

<xsl:template match='*|@*'>
  <xsl:copy>
  <xsl:apply-templates select='node()|@*'/>
 </xsl:copy>
</xsl:template>

<xsl:template match='faq'>
 <tr>
  <td valign='top' width='24' class="mText" style="font-size: 11px">
   <xsl:value-of select="count(preceding-sibling::*) + 1"/>
  </td>
  <td class="mText" style="font-size: 11px">
   <a href="#1">
    <xsl:value-of select='q'/>
   </a>
  </td>
 </tr>
</xsl:template>

How can I set up some kind of "toggle" to say parse again but just for the 'a' nodes please? Thanks very much in advance.
You want to use modes.

You can have multiple matches if you use a mode. Eg:

<xsl:apply-templates select="faq" mode="question"/>
<xsl:apply-templates select="faq" mode="answer"/>

...

<xsl:template match="faq" mode="question">
...Question processing...
</xsl:template>

<xsl:template match="faq" mode="answer">
...Answer processing...
</xsl:template

--
Kamal Bhatt

Current Thread