RE: [xsl] Output as per the filter is missing

Subject: RE: [xsl] Output as per the filter is missing
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 1 Aug 2007 09:03:01 +0100
In XSLT 1.0, if you do <xsl:value-of select="xxx"> and xxx selects more than
one node, only the first node in the set is output. To iterate over several
nodes, use xsl:for-each or (better) xsl:apply-templates.

You are doing <xsl:for-each select="section">, but that's rather pointless
because there is only one section.

At this stage of the game, it's much better to get into the habit of using
apply-templates. Write a template rule for each element saying what you want
done with it, for example

<xsl:template match="para">
  <xsl:apply-templates/>
</xsl:template> 

<xsl:template match="section">
  <xsl:apply-templates/>
</xsl:template> 

<xsl:template match="message[@priority='warn']">
  <p><xsl:value-of select="."/></p>
</xsl:template> 

<xsl:template match="message[@priority='info']">
  <xsl:comment><xsl:value-of select="."/></xsl:comment>
</xsl:template> 

Michael Kay
http://www.saxonica.com/

> -----Original Message-----
> From: Sharma, Jaikumar [mailto:jaikumar.sharma@xxxxxxxxx] 
> Sent: 01 August 2007 08:44
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Output as per the filter is missing 
> 
> Hi All,
> 
> I have the following XML document and XSL stylesheet.
> 
> Problem : When I try to render the XML document in HTML using browser.
> It gives me the following output, but does not list all the 
> warning messages as per the filter in XSL stylesheet, it only 
> list the first warning message.
> 
> Output :
> ___________________________
> Test Page
> 
> warn message 1
> ____________________________
> 
> 
> XML document :
> __________________________________________________________
> <?xml version="1.0"?>
> <?xml-stylesheet type="text/xsl" href="test.xsl"?>
> <docroot>
>    <mydocument>
>      <para>     
>         <section>
>              <message priority="warn">warn message 1</message>
>              <message priority="warn">warn message 2</message>
>              <message priority="info">info message 1</message>
>              <message priority="info">info message 2</message>
>              <message priority="info">info message 3</message>
> 
>         </section>
>      </para>
>    </mydocument>
> </docroot>
> __________________________________________________________
> 
> XSL stylesheet :
> 
> _________________________________________________________
> <?xml version="1.0"?>
>   <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
>   <xsl:output method="html" indent="yes" />  
> 
>   <xsl:template match="/">   
>     <html>
>       <head><p><b>Test Page</b></p></head>
>        <body>
>          <xsl:apply-templates select="docroot/mydocument/para"/>
>        </body>
>     </html>
>   </xsl:template>
>   
>    <xsl:template match="*">
>     <xsl:for-each select="section">
>           <xsl:value-of select="message[@priority='warn']"/>
>     </xsl:for-each> 
>    </xsl:template> 
> 
>  </xsl:stylesheet>   
> 
> _______________________________________________________
> 
> 
> I am Newbie to XSL, does somebody know which step I am missing here ?
> 
> Thanks.
> 
> 
> DISCLAIMER:
> Unless indicated otherwise, the information contained in this 
> message is privileged and confidential, and is intended only 
> for the use of the addressee(s) named above and others who 
> have been specifically authorized to receive it. If you are 
> not the intended recipient, you are hereby notified that any 
> dissemination, distribution or copying of this message and/or 
> attachments is strictly prohibited. The company accepts no 
> liability for any damage caused by any virus transmitted by 
> this email. Furthermore, the company does not warrant a 
> proper and complete transmission of this information, nor 
> does it accept liability for any delays. If you have received 
> this message in error, please contact the sender and delete 
> the message. Thank you.

Current Thread