Re: [xsl] <xsl:output method="xml"> and an if sentence to output XML

Subject: Re: [xsl] <xsl:output method="xml"> and an if sentence to output XML
From: JBryant@xxxxxxxxx
Date: Mon, 9 May 2005 11:12:17 -0500
Hi, Jacob,

I have written a different stylesheet to produce a dl list with different 
dd elements if an attribute named "this" is present:

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="xml" encoding="iso-8859-1" omit-xml-declaration="yes" 
standalone="no" indent="no" />

<xsl:template match="/">
  <xsl:apply-templates match="opml/body/outline"/>
</xsl:template>

<xsl:template match="outline">
  <dl>
    <dt><xsl:value-of select="@title" /></dt>
    <xsl:for-each select="outline">
      <xsl:choose>
        <xsl:when test="@this">
          <dd class="active">
            <a href="{@url}><xsl:value-of select="@title" /></a>
          </dd>
        </xsl:when>
        <xsl:otherwise>
          <dd>
            <a href="{@url}><xsl:value-of select="@title" /></a>
          </dd>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:for-each>
  <dl>
</xsl:template>

</xsl:stylesheet>

I think this stylesheet will work (though it's hard to say with no XML 
source to examine), and it much more closely follows XSLT's normal 
processing model.

Note that this stylesheet still does not produce a well-formed XML 
document, as the result document will have no root node (or will have 
multiple root nodes, depending on how you view such things). I assume you 
are going to do something more with the output (such as embed it in some 
other file).

HTH

Jay Bryant
Bryant Communication Services
(presently consulting at Synergistic Solution Technologies)





Jacob Friis Larsen <webcom.dk@xxxxxxxxx> 
05/09/2005 10:39 AM
Please respond to
xsl-list@xxxxxxxxxxxxxxxxxxxxxx


To
xsl-list@xxxxxxxxxxxxxxxxxxxxxx
cc

Subject
[xsl] <xsl:output method="xml"> and an if sentence to output XML






Below is my XSLT file.
I'd like to use <xsl:output method="xml">, but I haven't found a
solution to my problem, which is how to output <dd class="active"> if
parameter this exists and <dd> if it doesn't exist.

I would appreciate any help.
Thanks,
Jacob

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="
http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="text" encoding="iso-8859-1"
omit-xml-declaration="yes" standalone="no" indent="no" />

<xsl:template match="/">
                 <xsl:for-each select="/opml/body/outline">
                                 <xsl:call-template name="outline">
                                                 <xsl:with-param 
name="title"><xsl:value-of select="@title"
/></xsl:with-param>
                                 </xsl:call-template>
                 </xsl:for-each>
</xsl:template>

<xsl:template name="outline">
                 <xsl:param name="title" />
                 <xsl:text>&lt;dl&gt;</xsl:text>
                                 <xsl:text>&lt;dt&gt;</xsl:text>
                                 <xsl:value-of select="$title" />
                                 <xsl:text>&lt;/dt&gt;</xsl:text>
                                 <xsl:for-each select="outline">
                                                 <xsl:choose>
                                                                 <xsl:when 
test="@this">&lt;dd class="active"&gt;</xsl:when>
 <xsl:otherwise>&lt;dd&gt;</xsl:otherwise>
                                                 </xsl:choose>
                                                 <xsl:text>&lt;a 
href="</xsl:text>
                                                 <xsl:value-of 
select="@url" />
 <xsl:text>"&gt;</xsl:text>
                                                 <xsl:value-of 
select="@title" />
 <xsl:text>&lt;/a&gt;</xsl:text>
 <xsl:text>&lt;/dd&gt;</xsl:text>
                                 </xsl:for-each>
                 <xsl:text>&lt;dl&gt;</xsl:text>
</xsl:template>

</xsl:stylesheet>

Current Thread