Re: [xsl] Making an FAQ page from XML

Subject: Re: [xsl] Making an FAQ page from XML
From: Kamal Bhatt <kbhatt@xxxxxxxxx>
Date: Tue, 13 Feb 2007 07:35:16 +1100
John Steel wrote:
Kamal Bhatt wrote:
Don't make "*|@*" your first match. Make it your last. Instead, match on faqlist. Not entirely sure what are the extra content is, so I cannot really judge the right way of doing things. Try this:

<xsl:template match='faqlist'> <xsl:apply-templates select="*[local-name != 'faq']"/>
<xsl:apply-templates select="faq" mode="question"/> <xsl:apply-templates select="faq" mode="answer"/> </xsl:template>


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

Thanks for your help - its almost there now. What I get is the right output, just duplicated.
1 Question 1
2 Question 2
...
1 Answer 1
2 Answer 2
...
1 Question 1
2 Question 2
...
1 Answer 1
2 Answer 2
...


This is the full stylesheet I used:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
<xsl:output media-type='text/html'/>


<xsl:template match='faqlist'>
 <xsl:apply-templates select="*[local-name != 'faq']"/>
 <xsl:apply-templates select="faq" mode="question"/>
 <xsl:apply-templates select="faq" mode="answer"/>
</xsl:template>

<xsl:template match='faq' mode="question">
 <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>

<xsl:template match='faq' mode="answer">
 <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='a'/>
   </a>
  </td>
 </tr>
</xsl:template>

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

</xsl:stylesheet>

Did I make the changes you suggested correctly?
I noticed taking out the line
 <xsl:apply-templates select="*[local-name != 'faq']"/>
had no effect.





local-name = local-name()

--
Kamal Bhatt

Current Thread