Subject: RE: 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: 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.
|