Pass javascript variable to XSL

Discussion in 'XML' started by zakhirn@gmail.com, Sep 14, 2006.

  1. Guest

    Hello,

    I have the follow XML, XSL, and HTML file with javascript:

    cd.html:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"
    />
    <title>Untitled Document</title>

    <SCRIPT type="text/javascript">

    var xslurl = 'cd.xsl';
    var xmlurl = 'cd.xml';
    var xsl;
    var xml;

    function IEload()
    {


    xml = new ActiveXObject("MSXML.DOMDocument");
    xml.async = false;
    xml.load(xmlurl);
    // alert(xml.xml);


    }

    function IEtransform(queryText)
    {

    xsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
    xsl.async = false;
    xsl.load(xslurl);
    var xsldoc = xsl.documentElement;
    var nodelist = xsldoc.selectNodes('//*[@match="query"]');
    var queryTemplate = nodelist.item(0);
    queryTemplate.setAttribute('match', queryText);
    // alert(xsl.xml);


    /*try {*/
    var templ = new ActiveXObject("MSXML2.XSLTemplate");
    templ.stylesheet = xsl;
    var xslp = templ.createProcessor();
    xslp.input = xml;
    xslp.transform();
    var results = xslp.output;
    var resultDiv = document.getElementsByTagName('div')[0];
    resultDiv.innerHTML = results;
    document.queryBox.text.value = queryText;
    /*
    }
    catch(e)
    {
    alert('error: setup xslt: ' + e.description + '\n');
    }

    */

    }

    //-->
    </SCRIPT>


    </head>

    <body onLoad="IEload()">

    <form name="queryBox">
    <input type="text" name="text" value="Test" />
    <input type="button" value="Go"
    onClick="IEtransform('//body//p[contains ( . , \'' +
    document.queryBox.text.value + '\' )]') ">

    </form>

    <div class="results">
    </div>

    </body>
    </html>

    cd.xsl:
    <?xml version="1.0" encoding="ISO-8859-1"?><!-- DWXMLSource="cd.xml"
    -->
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template
    match="/">
    <html>
    <head>
    <title> XML XSL JS Trial</title>

    </head>
    <body>
    <h2>My CD Collection</h2>

    <table border="1">
    <tr bgcolor="#9acd32">
    <th>Title</th>
    <th>Artist</th>
    </tr>
    <xsl:for-each select="catalog/cd[artist=strSearch]">
    <tr>
    <td><xsl:value-of select="title"/></td>
    <td><xsl:value-of select="artist"/></td>
    </tr>
    </xsl:for-each>
    </table>
    </body>
    </html>
    </xsl:template></xsl:stylesheet>

    cd.xml:
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <?xml-stylesheet type="text/xsl" href="cd.xsl"?>
    <catalog>
    <cd>
    <title>Empire Burlesque</title>
    <artist>Bob Dylan</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>10.90</price>
    <year>1985</year>
    </cd>
    <cd>
    <title>Hide your heart</title>
    <artist>Bonnie Tyler</artist>
    <country>UK</country>
    <company>CBS Records</company>
    <price>9.90</price>
    <year>1988</year>
    </cd>
    <cd>
    <title>Greatest Hits</title>
    <artist>Dolly Parton</artist>
    <country>USA</country>
    <company>RCA</company>
    <price>9.90</price>
    <year>1982</year>
    </cd>
    <cd>
    <title>Still got the blues</title>
    <artist>Gary Moore</artist>
    <country>UK</country>
    <company>Virgin records</company>
    <price>10.20</price>
    <year>1990</year>
    </cd>
    <cd>
    <title>Eros</title>
    <artist>Eros Ramazzotti</artist>
    <country>EU</country>
    <company>BMG</company>
    <price>9.90</price>
    <year>1997</year>
    </cd>
    <cd>
    <title>One night only</title>
    <artist>Bee Gees</artist>
    <country>UK</country>
    <company>Polydor</company>
    <price>10.90</price>
    <year>1998</year>
    </cd>
    <cd>
    <title>Sylvias Mother</title>
    <artist>Dr.Hook</artist>
    <country>UK</country>
    <company>CBS</company>
    <price>8.10</price>
    <year>1973</year>
    </cd>
    <cd>
    <title>Maggie May</title>
    <artist>Rod Stewart</artist>
    <country>UK</country>
    <company>Pickwick</company>
    <price>8.50</price>
    <year>1990</year>
    </cd>
    <cd>
    <title>Romanza</title>
    <artist>Andrea Bocelli</artist>
    <country>EU</country>
    <company>Polydor</company>
    <price>10.80</price>
    <year>1996</year>
    </cd>
    <cd>
    <title>When a man loves a woman</title>
    <artist>Percy Sledge</artist>
    <country>USA</country>
    <company>Atlantic</company>
    <price>8.70</price>
    <year>1987</year>
    </cd>
    <cd>
    <title>Black angel</title>
    <artist>Savage Rose</artist>
    <country>EU</country>
    <company>Mega</company>
    <price>10.90</price>
    <year>1995</year>
    </cd>
    <cd>
    <title>1999 Grammy Nominees</title>
    <artist>Many</artist>
    <country>USA</country>
    <company>Grammy</company>
    <price>10.20</price>
    <year>1999</year>
    </cd>
    <cd>
    <title>For the good times</title>
    <artist>Kenny Rogers</artist>
    <country>UK</country>
    <company>Mucik Master</company>
    <price>8.70</price>
    <year>1995</year>
    </cd>
    <cd>
    <title>Big Willie style</title>
    <artist>Will Smith</artist>
    <country>USA</country>
    <company>Columbia</company>
    <price>9.90</price>
    <year>1997</year>
    </cd>
    <cd>
    <title>Tupelo Honey</title>
    <artist>Van Morrison</artist>
    <country>UK</country>
    <company>Polydor</company>
    <price>8.20</price>
    <year>1971</year>
    </cd>
    <cd>
    <title>Soulsville</title>
    <artist>Jorn Hoel</artist>
    <country>Norway</country>
    <company>WEA</company>
    <price>7.90</price>
    <year>1996</year>
    </cd>
    <cd>
    <title>The very best of</title>
    <artist>Cat Stevens</artist>
    <country>UK</country>
    <company>Island</company>
    <price>8.90</price>
    <year>1990</year>
    </cd>
    <cd>
    <title>Stop</title>
    <artist>Sam Brown</artist>
    <country>UK</country>
    <company>A and M</company>
    <price>8.90</price>
    <year>1988</year>
    </cd>
    <cd>
    <title>Bridge of Spies</title>
    <artist>T`Pau</artist>
    <country>UK</country>
    <company>Siren</company>
    <price>7.90</price>
    <year>1987</year>
    </cd>
    <cd>
    <title>Private Dancer</title>
    <artist>Tina Turner</artist>
    <country>UK</country>
    <company>Capitol</company>
    <price>8.90</price>
    <year>1983</year>
    </cd>
    <cd>
    <title>Midt om natten</title>
    <artist>Kim Larsen</artist>
    <country>EU</country>
    <company>Medley</company>
    <price>7.80</price>
    <year>1983</year>
    </cd>
    <cd>
    <title>Pavarotti Gala Concert</title>
    <artist>Luciano Pavarotti</artist>
    <country>UK</country>
    <company>DECCA</company>
    <price>9.90</price>
    <year>1991</year>
    </cd>
    <cd>
    <title>The dock of the bay</title>
    <artist>Otis Redding</artist>
    <country>USA</country>
    <company>Atlantic</company>
    <price>7.90</price>
    <year>1987</year>
    </cd>
    <cd>
    <title>Picture book</title>
    <artist>Simply Red</artist>
    <country>EU</country>
    <company>Elektra</company>
    <price>7.20</price>
    <year>1985</year>
    </cd>
    <cd>
    <title>Red</title>
    <artist>The Communards</artist>
    <country>UK</country>
    <company>London</company>
    <price>7.80</price>
    <year>1987</year>
    </cd>
    <cd>
    <title>Unchain my heart</title>
    <artist>Joe Cocker</artist>
    <country>USA</country>
    <company>EMI</company>
    <price>8.20</price>
    <year>1987</year>
    </cd>
    </catalog>


    basically, what I want to do is take the value from the text box in the
    html, and through the javascript load it in the variable strSearch in
    the XSL file. I have been taking code from different places so some of
    my variables do not match, but if anyone has any idea how to fix this I
    would be very happy. Thanks so much!
    , Sep 14, 2006
    #1
    1. Advertising

  2. I don't do Javascript, but look at the documentation for your XSLT
    processor to see how it wants you to pass stylesheet parameters (this,
    unfortunately, is not perfectly portable), and look at the XSLT spec for
    how to accept them (which should be portable).

    --
    () ASCII Ribbon Campaign | Joe Kesselman
    /\ Stamp out HTML e-mail! | System architexture and kinetic poetry
    Joe Kesselman, Sep 14, 2006
    #2
    1. Advertising

  3. RC Guest

    wrote:

    You can use Apache's Xalan Process to do that
    But very unfortunately Netscape, IE, Firefox, etc.
    browsers don't support Xalan process

    http://xalan.apache.org/

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xalan="http://xml.apache.org/xalan"

    xmlns:my-javascript-ext="my-ext2"
    extension-element-prefixes="my-javascript-ext"
    version="1.0">

    <xsl:eek:utput method="html" />

    <xalan:component prefix="my-javascript-ext" elements="whichever"
    functions="hello">
    <xalan:script lang="javascript">

    function hello(w) {
    return ("Hello " + w + "!");
    }
    </xalan:script>
    </xalan:component>

    <!--
    Test of JavaScript functions, they are working fine in Xalan Process! -->
    <xsl:if test="function-available('my-javascript-ext:hello')">
    <xsl:value-of select="my-javascript-ext:hello('World')" />

    </xsl:stylesheet>
    RC, Sep 19, 2006
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Karsten Weinert
    Replies:
    3
    Views:
    987
    Karsten Weinert
    Jul 5, 2004
  2. MC
    Replies:
    1
    Views:
    7,233
    David Carlisle
    Mar 24, 2005
  3. Replies:
    1
    Views:
    3,585
    A. Bolmarcich
    May 27, 2005
  4. Replies:
    2
    Views:
    9,244
    Martin Honnen
    Sep 5, 2006
  5. Replies:
    0
    Views:
    107
Loading...

Share This Page