Thanks for the reply Joe. You have certainly maxed out my XSLT abilities.
Anyway, I added your code to my HTML file and for all your functions that set a
new ActiveXObject, I get the following error:
'Automation server can't create object'
Originally I had all the ActiveXObjects set to MSXML2.FreeThreadedDOMDocument,
so I tried that, but it crashed when I tried to set oParams.loadXML.
It sounds like I have some other problems here than just passing the parameter,
huh?
From: "Joe Fawcett" <joefawcett(_at_)hotmail(_dot_)com>
Date: 2006/03/10 Fri AM 11:10:42 EST
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
Subject: Re: [xsl] Multiple select listbox as parameter
----- Original Message -----
From: <mfreeman(_at_)comptrex(_dot_)com>
To: <xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com>
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[(_at_)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[(_at_)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
--~------------------------------------------------------------------
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>
--~--
--~------------------------------------------------------------------
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>
--~--