The <xsl:import> must appear at that the top of the stylesheet.  In fact I
believe it needs to be the very first element after the <xsl:stylesheet>
element.

MikeB



                                                                                
                                                                       
                      John Nikolai                                              
                                                                       
                      <[EMAIL PROTECTED]        To:       [EMAIL PROTECTED]     
                                                             
                      >                        cc:                              
                                                                       
                                               Subject:  [Q] move common xslt 
to "template" file?                                                      
                      03/05/2003 06:34                                          
                                                                       
                      PM                                                        
                                                                       
                                                                                
                                                                       
                                                                                
                                                                       




OK, I'm a bit new to Xalan and XSLT so the following may or may not be
the "proper" way to implement things. So if you see any glaring
problems, please let me know! =)

Basically I'm sorting an XML document (based on the date element) and
dumping the contents into another XML document using the same elements
and structure. Is this the best way to do sorting? We will have a
rather large (100 to 200 event elements) XML file to walk through and I
don't see any API in Xerces to sort a Document object...

I also have one more question which requires a look at the XML and XSL
documents.

I have the following XML document:
------
<?xml version="1.0" encoding="UTF-8"?>
<calendar>
     <event>
         <date>2003-03-26</date>
         <name>BPC conference named event #-1186335162</name>
         <type>BPC conference</type>
         <theme>uh... theme???</theme>
         <description>BPC conference helpful description...</description>
     </event>
     <event>
         <date>2003-02-12</date>
         <name>LEIP conference named event #-1992363215</name>
         <type>LEIP conference</type>
         <theme>uh... theme???</theme>
         <description>LEIP conference helpful
description...</description>
     </event>
</calendar>
------

and 2 different XSL documents:
-----
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                 xmlns:xalan="http://xml.apache.org/xslt";>

             <xsl:output method="xml"
                                                 indent="yes"
                                                 xalan:indent-amount="4" />

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

             <xsl:template match="calendar">
                         <xsl:for-each select="event">
                                                 <xsl:choose>
                                                             <xsl:when test
="number(substring(date,6,2)) &gt; 2

                                     and number(substring(date,9,2)) &gt; 1

                                     and number(substring(date,9,2)) &lt; 5">


                                                                         <event>

 <date> <xsl:value-of select="date" /> </date>

 <name> <xsl:value-of select="name" /> </name>

 <type> <xsl:value-of select="type" /> </type>

 <theme> <xsl:value-of select="theme" /> </theme>

 <description> <xsl:value-of select="description" />
</description>

</event>
                                                             </xsl:when>
                                                 </xsl:choose>
                         </xsl:for-each>
             </xsl:template>
</xsl:stylesheet>
-----
and ...
-----
  <xsl:output method="xml"
                                                 indent="yes"
                                                 xalan:indent-amount="4" />

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

             <xsl:template match="calendar">
                         <xsl:for-each select="event">
                                     <!-- <xsl:apply-templates> -->
                                                 <!-- substring(element,
start_index, length) -->
                                                 <xsl:sort select
="substring(date,1,4)"/> <!-- year -->
                                                 <xsl:sort select
="substring(date,6,2)"/> <!-- month -->
                                                 <xsl:sort select
="substring(date,9,2)"/> <!-- day -->

                                                 <event>
                                                             <date>
<xsl:value-of select="date" /> </date>
                                                             <name>
<xsl:value-of select="name" /> </name>
                                                             <type>
<xsl:value-of select="type" /> </type>
                                                             <theme>
<xsl:value-of select="theme" /> </theme>
                                                             <description>
<xsl:value-of select="description" /> </description>
                                                 </event>
                                     <!-- </xsl:apply-templates> -->
                         </xsl:for-each>
             </xsl:template>
</xsl:stylesheet>
-----

I get the output we want but was wondering if its possible to move this
code:
-----
<event>
   <date> <xsl:value-of select="date" /> </date>
   <name> <xsl:value-of select="name" /> </name>
   <type> <xsl:value-of select="type" /> </type>
   <theme> <xsl:value-of select="theme" /> </theme>
   <description> <xsl:value-of select="description" /> </description>
</event>
-----

... into a template which could be imported to each of the XSL
documents as needed. I tried using <xsl:import> and <xsl:include>
thinking these were similar to the JSP counter parts but that's not the
case. The reason we want to does this  is that if the XML document
changes we only want to update a single XSL document. Of course if the
date element name changes we would have to modify the XSL accordingly...

I know the following does not work but this gives you an idea of what
we want... Note that the only change is hte inclusion of "<xsl:import
href="event_xml_format.xsl" />"
-------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                 xmlns:xalan="http://xml.apache.org/xslt";>

             <xsl:output method="xml"
                                                 indent="yes"
                                                 xalan:indent-amount="4" />

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

             <xsl:template match="calendar">
                         <xsl:for-each select="event">
                                                 <xsl:choose>
                                                             <xsl:when test
="number(substring(date,6,2)) &gt; 2

                                     and number(substring(date,9,2)) &gt; 1

                                     and number(substring(date,9,2)) &lt; 5">



<xsl:import href="event_xml_format.xsl" />
                                                             </xsl:when>
                                                 </xsl:choose>
                         </xsl:for-each>
             </xsl:template>
</xsl:stylesheet>
-------

Sorry for such a huge email...
Thanks much for your help!
  - John








Reply via email to