[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Re:Re:How to simplify the xslt expression for mult

Subject: RE: Re:Re:How to simplify the xslt expression for multiple conditions.
From: "Yang" <sfyang@xxxxxxxxxxxxx>
Date: Wed, 30 May 2001 14:38:48 +0800
xsltprocessor.addparameter
Hi, Jeni,

Your nice explanation about using xml serilization as xml argument in
javascript  function is very  helpful.

>So, in the call to changePage(), you need to pass the serialised XML
>that you want to transform as the second argument.  You don't show the
>part where you do it; it needs to looks something like:

>  changePage(<xsl:value-of select="$pagenumber + 1" />,
             '<xsl:call-template name="js-escape">
                <xsl:with-param name="string">
                   <xsl:call-template name="serialiseXML">
                      <xsl:with-param name="originalDoc"
                                      select="/" />
                   </xsl:call-template>
                </xsl:with-param>
              </xsl:call-template>',
             'style.xsl');

I find out two interesting things which  you might like to know;
1   The js-escape  template seems to omit  the xml-declaration while
producing
the serialised XML.   Since a part of xml is related to BIG5 , I must have
this PI built in,
such as <?xml version="1.0" encoding="big5"?>     What is remedy to
js-escape template?

2.  It seems to me there is size limitation when using serialized XML as
javascript augument.
To prove this point, I keep adding **line** element into xml file.  At
certain point,  the page change function
becomes unfunctional and look like to be locked.   Could you see what is
caused.
xml, xsl are listed below for fyi.

>In fact, since you *always* want the second argument to be this
>particular set of XML, you could hardcode it into the definition of
>the Javascript function rather than pass it as a variable.

I have a hard time to understand  what is the phrase  saying:
 **  you could  the hardcode  it into the definition of .... ***
Are you suggesting that once I loadXML xml doc., and saved it as a global
variable,
then when doing the sequent paging,  only I have to do is to use .addparam
for new page number and
display the output.

Thanks again for your help.

Sun-fu Yang

** xml **
<?xml version="1.0" ?>
<?xml-stylesheet href="test.xsl" type="text/xsl"?>
<docs >

<line  CustomerCode="AAA" SalesOrderNo="B001-1-0101110093"/>
<line  CustomerCode="BBB" SalesOrderNo="B001-1-0101110094"/>
<line  CustomerCode="BBB" SalesOrderNo="B001-1-0101110095"/>
<line  CustomerCode="AAA" SalesOrderNo="B001-1-0101110096"/>
<line  CustomerCode="CCC" SalesOrderNo="B001-1-0101110097"/>
<line  CustomerCode="BBB" SalesOrderNo="B001-1-0101150120"/>
<line  CustomerCode="BBB" SalesOrderNo="B001-1-0101150121"/>
<line  CustomerCode="AAA" SalesOrderNo="B001-1-0101150122"/>
<line  CustomerCode="AAA" SalesOrderNo="B001-1-0101150123"/>
<line  CustomerCode="DDD" SalesOrderNo="A001-1-0101170004"/>
<line  CustomerCode="BBB" SalesOrderNo="B001-1-0101150121"/>
<line  CustomerCode="AAA" SalesOrderNo="B001-1-0101150122"/>
<line  CustomerCode="AAA" SalesOrderNo="B001-1-0101150123"/>
<line  CustomerCode="DDD" SalesOrderNo="A001-1-0101170004"/>
<line  CustomerCode="DDD" SalesOrderNo="A001-1-0101170004"/>
<line  CustomerCode="BBB" SalesOrderNo="B001-1-0101150121"/>
<line  CustomerCode="EEE" SalesOrderNo="B001-1-0101150122"/>
<line  CustomerCode="AAA" SalesOrderNo="B001-1-0101150123"/>
<line  CustomerCode="DDD" SalesOrderNo="A001-1-0101170004"/>
<line  CustomerCode="AAA" SalesOrderNo="B001-1-0101150122"/>
<line  CustomerCode="AAA" SalesOrderNo="B001-1-0101150123"/>
<line  CustomerCode="DDD" SalesOrderNo="A001-1-0101170004"/>
<line  CustomerCode="DDD" SalesOrderNo="A001-1-0101170004"/>
<line  CustomerCode="BBB" SalesOrderNo="B001-1-0101150121"/>
<line  CustomerCode="EEE" SalesOrderNo="B001-1-0101150128"/>
<line  CustomerCode="AAA" SalesOrderNo="B001-1-0101150123"/>
<line  CustomerCode="DDD" SalesOrderNo="A001-1-0101170004"/>
<line  CustomerCode="DDD" SalesOrderNo="A001-1-0101170004"/>
<line  CustomerCode="DDD" SalesOrderNo="A001-1-0101170004"/>
<line  CustomerCode="BBB" SalesOrderNo="B001-1-0101150121"/>
<line  CustomerCode="EEE" SalesOrderNo="B001-1-0101150122"/>
<line  CustomerCode="BBB" SalesOrderNo="B001-1-0101150121"/>
**  Adding one more piece of **line**  data  here,  the size will disable
the paging function ***

</docs>

**  xsl ***
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" >

<xsl:include href="PagesXML.xsl" />
<xsl:output method="xml" indent="yes"/>

<xsl:key name="Listings" match="line" use="@CustomerCode" />
<xsl:key name="salesNo" match="line"
use="concat(@CustomerCode,'::',@SalesOrderNo)"/>

<xsl:param name="month" select="''"/>
<xsl:param name="space" select="2"/>
<xsl:param name="pagenumber" select="1"/>
  <xsl:param name="start2" select="($pagenumber - 1) * $space" />
  <xsl:param name="end2" select="$pagenumber * $space + 1" />

<!-- rtf-rows template - filtering, normalization of xml doc-->
<xsl:template name="rtf-rows">
<xsl:param name="source"/>

<rowset>
<xsl:apply-templates select="$source[substring(@SalesOrderNo[$month], 10, 2)
= $month]" />
</rowset>
</xsl:template>

<xsl:template match="line">
<line>
 <xsl:apply-templates select="@*|node()"/>
</line>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="normalize-space(.)"/>

</xsl:attribute>
</xsl:template>

<xsl:template match="/">
<head>
<script language="javascript" >
   function changePageXML(number,xmlfile,xslfile,pageParam,space){
      XMLDOM = new ActiveXObject('Msxml2.FreeThreadedDOMDocument');
       XMLDOM.async = false;
      XMLDOM.loadXML(xmlfile);
         XSLTDOM = new ActiveXObject('Msxml2.FreeThreadedDOMDocument');
         XSLTDOM.async = false;
         XSLTDOM.load(xslfile);
     XSLStylesheet = new ActiveXObject('Msxml2.XSLTemplate');
      XSLStylesheet.stylesheet = XSLTDOM;
      XSLTProcessor = XSLStylesheet.createProcessor();
     XSLTProcessor.input = XMLDOM;
      XSLTProcessor.addParameter('xmlid', xmlfile);
      XSLTProcessor.addParameter('space', space);
      XSLTProcessor.addParameter('pageParam', pageParam);
      XSLTProcessor.addParameter('pagenumber2', number);
      XSLTProcessor.addParameter('pagenumber', number);
      XSLTProcessor.transform();
      try{       content.innerHTML=XSLTProcessor.output;
 }
      catch(e){
      document.open();
      document.write(XSLTProcessor.output);
      document.close();
}
 }

</script>
 </head>
<xsl:variable name="rows-rtf">
<xsl:call-template name="rtf-rows">
<xsl:with-param name="source" select="//line"/>
</xsl:call-template>
</xsl:variable>

 <xsl:variable name="originalDoc"
select="msxsl:node-set($rows-rtf)/rowset"/>
 <xsl:variable name="MSource" select="$originalDoc/line"/>
<xsl:if test="string($month)"><xsl:value-of select="concat('Month
:',$month)"/></xsl:if>

<!--  get the unique set of @CustomerCode and saved as rtf -->
<xsl:variable name="docsx">
<xsl:for-each
select="$MSource[generate-id(.)=generate-id(key('Listings',@CustomerCode)[1]
)]">
<xsl:sort select="@CustomerCode"/>
<pdata> <xsl:value-of select="@CustomerCode"/><br/>
</pdata>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="nodeset" select="msxsl:node-set($docsx)/pdata"/>

<!--  prepare the Pages mechanism -->
<xsl:call-template name="PagesXML">
 <xsl:with-param name="element" select="$nodeset"/>
 <xsl:with-param name="pagenumber" select="$pagenumber" />
        <xsl:with-param name="space" select="$space"/>
 <xsl:with-param name="xmlfile" select="$originalDoc"/>
 <xsl:with-param name="xslfile" select="'test.xsl'"/>
 <xsl:with-param name="pageParam" select="''"/>
</xsl:call-template>

<!-- display the outputs -->
<xsl:call-template name="outdoc2">
 <xsl:with-param name="start" select="$start2"/>
 <xsl:with-param name="end" select="$end2"/>
 <xsl:with-param name="nodeset" select="$nodeset"/>
 <xsl:with-param name="originalDoc" select="$originalDoc"/>
</xsl:call-template>
</xsl:template>

<!--  output template  -->
<xsl:template name="outdoc2">
<xsl:param name="start" />
<xsl:param name="end" />
<xsl:param name="nodeset"/>
<xsl:param name="originalDoc"/>

<center>
<!--  using the group by postion to display the section of outputs -->
<xsl:for-each select="$nodeset[position() &gt;$start and position() &lt;
($end)]">
      <xsl:value-of select="position() + $start"/>
      <xsl:variable name="thisPP" select="."/>&#160;&#160;
      <xsl:value-of select="$thisPP"/><br/>
<table>
<xsl:for-each select="$originalDoc">
<tr>
<xsl:for-each select="key('Listings',$thisPP)">
<td><xsl:value-of select="@SalesOrderNo"/></td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:for-each>
</center>
<br/>

</xsl:template>
</xsl:stylesheet>




 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.