[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
----- Original Message ----- From: <mfreeman@xxxxxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Friday, March 10, 2006 1:11 PM
Subject: [xsl] Multiple select listbox as parameter
var _oFTTemplate = null;
function getFTTemplate()
{
if (!_oFTTemplate)
{
_oFTTemplate = new ActiveXObject("Msxml2.XSLTemplate.4.0");
}
return _oFTTemplate;
}
function main()
{
var oSource = getSyncDom();
oSource.load("GetGroups.xml");
var oStyle = getSyncFTDom();
oStyle.load("GetGroups1.xslt");
var oTemplate = getFTTemplate();
oTemplate.stylesheet = oStyle;
var oProc = oTemplate.createProcessor();
oProc.input = oSource;
var arrGroupKeys = ["001", "002"];
var oParams = getSyncDom();
oParams.loadXML("<KEYS/>");
for (var i = 0; i < arrGroupKeys.length; i++)
{
(oParams.documentElement.appendChild(oParams.createElement("KEY"))).text = arrGroupKeys[i];
}
oProc.addParameter("lstGroup", oParams.documentElement.selectNodes("KEY"));
oProc.transform();
alert(oProc.output);
}
main();
--
Joe
Re: [xsl] Multiple select listbox as parameter
Subject: Re: [xsl] Multiple select listbox as parameter From: "Joe Fawcett" <joefawcett@xxxxxxxxxxx> Date: Fri, 10 Mar 2006 16:10:42 -0000 |
----- Original Message ----- From: <mfreeman@xxxxxxxxxxxx>
To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
Sent: Friday, March 10, 2006 1:11 PM
Subject: [xsl] Multiple select listbox as parameter
Hi all. I could really use some help...
My XML looks like this:<?xml version='1.0'?> <Data> <Indicator KEY='001'> <Group Key='001'/> <Group Key='005/> </Indicator> <Indicator KEY='002'> <Group KEY='003'/> <Group KEY='002'/> </Indicator> <Indicator KEY='003'> <Group KEY='004'/> <Group KEY='003'/> </Indicator> </Data>
I have a list box, where you can select multiple Groups. If I select groups 002 and 001, it should return Indicators 001 and 002. The paramater that I pass is 001,002,. So from my XSL, I tried two things. First was to see if the parameter contained the key:
<xsl:for-each select="Indicator"> <xsl:when test="contains($lstGroup,Group/@KEY)"> ...do something... </xsl:when> <xsl:for-each>
This worked great, but only if the first group matched the criteria. So it returns just indicator 001.
Then I tried this:
<xsl:for-each select="Indicator"> <xsl:when test="Group[@KEY=$lstGroup]"> ...do something... </xsl:when> <xsl:for-each>
And this works great, except it will not accept a multiple list from the list box. Only when I pass one choice to the paramater.
I tried this:
<xsl:for-each select="Indicator"> <xsl:when test="contains($lstGroup,Group[@KEY])"> ...do something... </xsl:when> <xsl:for-each>
But this returned all indicators.
Is there a way to combine the two working bits of code to do what I want to do? It may be in the way I call the parameter, or it may be in the output code. Here's how I call the parameter from a multiselect list box:
(This is on my HTML page) var as Values = New Array(); var oSel = document.sel.lstGroup; var strGroup1 = "" for (var i-0; i<oSel.length;i++)[ if (oSel.options[i].selected){ asValues[asValues.length]=oSel.options[i].value; strGroup1=strGroup1 + oSel.options[i].value + ","; }
}
xslproc.addparameter("lstGroup",strGroup1,"");
This passes '001,002,' to my xsl page.
Here is the full version of all of the code.
http://www.comptrex.com/eed/EED.htm
I also noticed since I put it up, that it's unbearably slow. Any suggestions for that?
Any help is greatly appreciated. Thanks,
You should pass a nodelist to the addParameter method. Something like: **********GetGroups.xml************ <Data> <Indicator KEY='001'> <Group KEY='001'/> <Group KEY='005'/> </Indicator> <Indicator KEY='002'> <Group KEY='003'/> <Group KEY='002'/> </Indicator> <Indicator KEY='003'> <Group KEY='004'/> <Group KEY='003'/> </Indicator> </Data>
****************************** ***********GetGroups1.xslt******* <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="lstGroup"/> <xsl:template match="/Data"> <Indicators> <xsl:apply-templates select="Indicator[Group/@KEY = $lstGroup]"/> </Indicators> </xsl:template> <xsl:template match="Indicator"> <xsl:copy-of select="."/> </xsl:template> </xsl:stylesheet> ****************************** var _oFTDom = null; function getSyncFTDom() { if(!_oFTDom) { _oFTDom = new ActiveXObject("Msxml2.FreeThreadedDomDocument.4.0"); } return _oFTDom.cloneNode(false); } var _oDom = null; function getSyncDom() { if(!_oDom) { _oDom = new ActiveXObject("Msxml2.DomDocument.4.0"); } return _oDom.cloneNode(false); }
var _oFTTemplate = null;
function getFTTemplate()
{
if (!_oFTTemplate)
{
_oFTTemplate = new ActiveXObject("Msxml2.XSLTemplate.4.0");
}
return _oFTTemplate;
}
function main()
{
var oSource = getSyncDom();
oSource.load("GetGroups.xml");
var oStyle = getSyncFTDom();
oStyle.load("GetGroups1.xslt");
var oTemplate = getFTTemplate();
oTemplate.stylesheet = oStyle;
var oProc = oTemplate.createProcessor();
oProc.input = oSource;
var arrGroupKeys = ["001", "002"];
var oParams = getSyncDom();
oParams.loadXML("<KEYS/>");
for (var i = 0; i < arrGroupKeys.length; i++)
{
(oParams.documentElement.appendChild(oParams.createElement("KEY"))).text = arrGroupKeys[i];
}
oProc.addParameter("lstGroup", oParams.documentElement.selectNodes("KEY"));
oProc.transform();
alert(oProc.output);
}
main();
--
Joe
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Multiple select listbox as pa, mfreeman | Thread | Re: Re: [xsl] Multiple select listb, mfreeman |
RE: [xsl]: XSL processes XML incor, cknell | Date | [xsl] Re: XSL:FO for .NET, Karl Stubsjoen |
Month |