xsl-list
[Top] [All Lists]

RE: One Strange Problem

2004-05-06 22:38:21
I guess it would help if I included the stylesheet. :)

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version
="1.0">
        <xsl:param name="sortby">DateVal</xsl:param>
        <xsl:param name="datatype">number</xsl:param>
        <xsl:template match="viewentries">
                <div class="child" id="Sheet Entry">
                        <table class="standard" cellspacing="0"
cellpadding="0">
                                <xsl:if test="$sortby='DateVal'">
                                        <xsl:for-each select="viewentry">
                                                <xsl:sort
select="substring(DateVal , 7,2)" order="ascending" data-type="number"/>
                                                <xsl:sort
select="substring(DateVal , 4,2)" order="ascending" data-type="number"/>
                                                <xsl:sort
select="substring(DateVal , 1,2)" order="ascending" data-type="number"/>
                                                <xsl:apply-templates
select="."/>
                                        </xsl:for-each>
                                </xsl:if>
                                <xsl:if test="$sortby='EnterBy' ">
                                        <xsl:for-each
select="/viewentries/viewentry">
                                                <xsl:sort select="$sortby"
data-type="text"/>
                                        </xsl:for-each>
                                </xsl:if>
                                <xsl:if test="$sortby='EntryNo'">
                                        <xsl:for-each
select="/viewentries/viewentry">
                                                <xsl:sort select="$sortby"
data-type="number"/>
                                        </xsl:for-each>
                                </xsl:if>
                        </table>
                        <br/>
                </div>
        </xsl:template>
        <xsl:template match="viewentry">
                <xsl:choose>
                        <xsl:when test="RowNo/text()">
                                <tr class="comments">
                                        <td width="658" colspan ="3">
                                                <hr width="658" align
="left" valign="bottom"/>
                                        </td>
                                </tr>
                        </xsl:when>
                        <xsl:otherwise>
                                <tr class="comments">
                                        <td width="658" colspan ="3">
                                                <hr width="90" align ="left"
valign="bottom"/>
                                        </td>
                                </tr>
                        </xsl:otherwise>
                </xsl:choose>
                <tr class="title">
                        <td width="90">Date</td>
                        <td width="396" class ="commentstitle">Comments</td>
                        <td width="153">Entered By</td>
                </tr>
                <tr class="content">
                        <td width="90">
                                <xsl:value-of select="DateVal"/>
                        </td>
                        <td width="396" rowspan="5" valign ="top"
class="comments">
                                <xsl:value-of select="Comments"/>
                        </td>
                        <td width="153">
                                <xsl:value-of select="EnterBy"/>
                        </td>
                </tr>
                <tr class="title">
                        <td width="90">Time</td>
                        <td width="153">Entered Date</td>
                </tr>
                <tr class="content">
                        <td width="90">
                                <xsl:value-of select="TimeVal"/>
                        </td>
                        <td width="153">
                                <xsl:value-of select ="EnterDate"/>
                        </td>
                </tr>
                <tr class="title">
                        <td width="90">Entry No</td>
                        <td width="153">Action Req.</td>
                </tr>
                <tr class="content">
                        <td width="90">
                                <xsl:value-of select="EntryNo"/>
                        </td>
                        <td width="153">
                                <xsl:value-of select="Action"/>
                        </td>
                </tr>
        </xsl:template>
</xsl:stylesheet>

Good luck,
Kenny Akridge

-----Original Message-----
From: Myee(_dot_)Riri(_at_)hic(_dot_)gov(_dot_)au 
[mailto:Myee(_dot_)Riri(_at_)hic(_dot_)gov(_dot_)au] 
Sent: Friday, May 07, 2004 12:50 AM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] One Strange Problem

Hi,

I am new to XML/XSL land. I only started learning 2 days ago so please bear
with me. Don't worry about sounding patronising or anything, just serve it
to me cold.

I have an XML file which is generated by a Domino Agent. This xml file is
transformed by XSL and then displayed in a HTML page. The HTML page is
generated from a domino form and Agent (domino program), and has a form
with hidden fields in it. One of the hidden fields (SortVal) value is the
xml tag that I want to use to sort in my xsl.

I have a xsl:param called sortby, which I change to the value of SortVal
using javascript in the HTML page. So I want to sort each viewentry by
$sortval, however I don't really have any idea what I am doing.
Additionally I need to sort by date and I am aware there is no way to sort
by date, so I made somthing up.

I have been told the code is bad, but I can't change it since that would
involve changing the agent that creates it (which is unfeasible because
this agent creates more than one xml file depending on variables, and
changing it could affect other xml files and xsl stylesheets, and I don't
have the time). The only thing that is feasible to change is the xsl.

The file does not sort at all.

Here is a snippet of the xml populated with dummy data. The root tag is
called <viewentries>. It contains tages other than <viewentry> that are not
relevent so Ihave omitted them.


      <viewentry position="1" noteid="docnoteid1">
            <DateVal>01/02/2005</DateVal>
            <TimeVal>55555</TimeVal>
            <EntryNo>10</EntryNo>
            <Comments>I gots something to tell ya</Comments>
            <EnterBy>ANAME</EnterBy>
            <EnterDate>08/05/2003</EnterDate>
            <Action/>
            <RowNo>1</RowNo>
      </viewentry>
      <viewentry position="2" noteid="docnoteid1">
            <DateVal>27/02/2001</DateVal>
            <TimeVal>44444</TimeVal>
            <EntryNo>1</EntryNo>
            <Comments>Test Comment</Comments>
            <EnterBy>QNAME</EnterBy>
            <EnterDate>08/05/2003</EnterDate>
            <Action/>
            <RowNo>2</RowNo>
      </viewentry>
      <viewentry position="3" noteid="docnoteid1">
            <DateVal>31/12/2004</DateVal>
            <TimeVal>11111</TimeVal>
            <EntryNo>3</EntryNo>
            <Comments>Test another commet</Comments>
            <EnterBy>ZNAME</EnterBy>
            <EnterDate>08/05/2003</EnterDate>
            <Action/>
            <RowNo>4</RowNo>
      </viewentry>

here is the main snippets causing problems in my xsl

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version
="1.0">
      <xsl:param name="sortby">DateVal</xsl:param>
      <xsl:param name="datatype">number</xsl:param>

.........................................................................

.........................................................................

.........................................................................
      <xsl:template match="viewentries/viewentry">
            <div class="child" id="Sheet Entry">
            <table class="standard" cellspacing="0" cellpadding="0">
                  <xsl:if test="$sortby='DateVal'">
                              <xsl:for-each select="DateVal">
                                    <xsl:sort select="substring(. , 7,2)"
order="ascending" data-type="number"/>
                                    <xsl:sort select="substring(. , 4,2)"
order="ascending" data-type="number"/>
                                    <xsl:sort select="substring(. , 1,2)"
order="ascending" data-type="number"/>
                                    <xsl:value-of select="."/>
                              </xsl:for-each>
                  </xsl:if>
                  <xsl:if test="$sortby='EnterBy' ">
                        <xsl:for-each select="/viewentries/viewentry">
                              <xsl:sort select="$sortby" data-type="text"
/>
                        </xsl:for-each>
                  </xsl:if>
                  <xsl:if test="$sortby='EntryNo'">
                        <xsl:for-each select="/viewentries/viewentry">
                              <xsl:sort select="$sortby" data-type="number"
/>
                        </xsl:for-each>
                  </xsl:if>
                              <xsl:choose>
                                    <xsl:when test="RowNo/text()">
                                          <tr class="comments">
                                                <td width="658" colspan
="3">
                                                      <hr width="658" align
="left" valign="bottom"/>
                                                </td>
                                          </tr>

                                    </xsl:when>
                                    <xsl:otherwise>
                                          <tr class="comments">
                                                <td width="658" colspan
="3">
                                                      <hr width="90" align
="left" valign="bottom"/>
                                                </td>
                                          </tr>
                                    </xsl:otherwise>
                              </xsl:choose>

                              <tr class="title">
                                    <td width="90">Date</td>
                                    <td width="396" class
="commentstitle">Comments</td>
                                    <td width="153">Entered By</td>
                              </tr>
                              <tr class="content">
                                    <td width="90">
                                          <xsl:value-of select="DateVal"/>
                                    </td>
                                    <td width="396" rowspan="5" valign
="top" class="comments">
                                          <xsl:value-of select="Comments"/>
                                    </td>
                                    <td width="153">
                                          <xsl:value-of select="EnterBy"/>
                                    </td>
                              </tr>
                              <tr class="title">
                                    <td width="90">Time</td>
                                    <td width="153">Entered Date</td>
                              </tr>
                              <tr class="content">
                                    <td width="90">
                                          <xsl:value-of select="TimeVal"/>
                                    </td>
                                    <td width="153">
                                          <xsl:value-of select
="EnterDate"/>
                                    </td>
                              </tr>
                              <tr class="title">
                                    <td width="90">Entry No</td>
                                    <td width="153">Action Req.</td>
                              </tr>
                              <tr class="content">
                                    <td width="90">
                                          <xsl:value-of select="EntryNo"/>
                                    </td>
                                    <td width="153">
                                          <xsl:value-of select="Action"/>
                                    </td>
                              </tr>
                        </table>
                        <br/>
                  </div>
      </xsl:template>
</xsl:stylesheet>

The value of $sortby is correctly changed by js, I have checked that. I was
told it's a problem relating to where I put my sort stuff, and scope. I
tried moving stuff around and I got a lot of errors.

Can anyone suggest ways to improve/fix my xsl?

Thankyou in advanced.

P.S. I can tell I will not get much work done anymore since I will be
reading everyones emails all the time :)





****************************************************************
NOTICE - This message is intended only for the use of the 
addressee named above and may contain privileged and 
confidential information.  If you are not the intended recipient
of this message you are hereby notified that you must not 
disseminate, copy or take any action based upon it.  If you 
received this message in error please notify HIC immediately.
Any views expressed in this message are those of the individual
sender, except where the sender specifically states them to be
the views of HIC.
****************************************************************


--+------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--




<Prev in Thread] Current Thread [Next in Thread>