Avatar billede kimlarsen1978 Nybegynder
23. februar 2004 - 14:58 Der er 12 kommentarer og
2 løsninger

Dan tabel efter valg i dropdown XSL

Hej Eksperter
Jeg er helt grøn indenfor XML/XSL/XSLT og sidder og leger lidt med det.

Jeg har et par spørgsmål, men først vil jeg lige beskrive hvad det er jeg gerne vil:
------------
1) man vælger en varekategori i en dropdownbox
2) når man har valgt det kommer der en tabel frem over de vare der er i kategorien
------------
Jeg læser varekategorierne ind i en dropdown på denne måde:
-----------
<xsl:template match='start'>
<Form method="post" name="vaelgKategori">
<b>Vælg kategori:</b><br/>
<select size="1" name="produkt">
  <option><xsl:attribute name="selected value"></xsl:attribute>Vaelg et produkt</option>
  <xsl:apply-templates select='kategorier' />   
</select><br />
</Form>
</xsl:template>

<xsl:template match='kategorier'>
<option><xsl:attribute name="value"><xsl:value-of select='@Kategori_id'/></xsl:attribute>
<xsl:value-of select='@KategoriNavn'/></option>
</xsl:template>
-------------------------

Jeg laver tabellen på denne måde:
------------------------
<b>Vare i kategorien:</b><br />
<table border="1">
<th>Varenavn</th>
<th>Beskrivelse</th>
<th>Benyt</th>
<xsl:apply-templates select='vare'/>
</table>

<xsl:template match='vare'>
<tr>
<td><xsl:value-of select='@vareNavn'/></td>
<td><xsl:value-of select='@Beskrivelse'/></td>
<td><input type="checkbox" value="ON"><xsl:attribute name="name"><xsl:value-of select='@vare_id'/></xsl:attribute></input></td>
</tr>
</xsl:template>
------------------------
og det virker enkeltvis. Men så sidder jeg også fast :(

Hvordan får jeg det lavet sådan at tabellen først kommer frem når man har valgt en kategori i dropdownboxen? og at de data som er i tabellen er dem som tilhører kategorien.
Avatar billede nute Nybegynder
23. februar 2004 - 15:08 #1
hmm... hvordan transformerer du din XSL? via ASP, Javascript, PHP ?

det du skal gøre, er at sende et parameter med til din xsl. men for at fortælle hvordan du gør det, så er du nødt til at fortælle hvordan du transformerer

/nute
Avatar billede kimlarsen1978 Nybegynder
23. februar 2004 - 15:09 #2
Det er med ASP language=javescript
Avatar billede nute Nybegynder
23. februar 2004 - 15:27 #3
du skal bruge 'addParameter' metoden på dit xsl-processor. kig her for et eksempel:

http://msdn.microsoft.com/library/en-us/xmlsdk30/htm/xmmthaddparameter.asp?frame=true

det du kan gøre, er jo at lave denne linje:

xslProc.addParameter("param1", "Hello");

om til :

if( LEN( Request("produkt") ) > 0 ) then
    xslProc.addParameter("pVare", Request("produkt") );
end if

øverst i din xsl, kan du så lave et parameter:

<xsl:parameter name="pVare" />

som du tjekker op mod når du laver din tabel:

<xsl:if test="$pVare != ''">[skriv ud vare]</xsl:if>

håber det kan hjælpe ...

/nute
Avatar billede kimlarsen1978 Nybegynder
23. februar 2004 - 15:41 #4
min xsl-processor?
Avatar billede kimlarsen1978 Nybegynder
23. februar 2004 - 15:48 #5
Kan du lave en step by step forklaring ud fra de kodestumper jeg har givet øverst?
Avatar billede nute Nybegynder
23. februar 2004 - 15:56 #6
hvis du kigger på linket jeg har givet dig, så er det et kodeeksempel. det ser sådan ud:

var xslt = new ActiveXObject("Msxml2.XSLTemplate");
var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
var xslProc;
xslDoc.async = false;
xslDoc.resolveExternals = false;
xslDoc.load("sample.xsl");
xslt.stylesheet = xslDoc;
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
xmlDoc.async = false;
xmlDoc.resolveExternals = false;
xmlDoc.load("books.xml");
xslProc = xslt.createProcessor();
xslProc.input = xmlDoc;

// ------------------------------------------------------------------------
// DENNE LINJE SENDER PARAMETER
xslProc.addParameter("param1", "Hello");
// LINJEN OVER SENDER PARAMETER
// ------------------------------------------------------------------------

xslProc.transform();
alert(xslProc.output);

Dette er en helt almindelig måde at transformere på. prøv det sammen med de ting jeg har postet i forrige indlæg

/nute
Avatar billede kimlarsen1978 Nybegynder
23. februar 2004 - 16:03 #7
Ja er helt ny i det her.

Hvad skal ind på ASP siden og hvad skal ind på xsl siden? 
jeg kan vel ikke lave dette på xsl siden

if( LEN( Request("produkt") ) > 0 ) then
    xslProc.addParameter("pVare", Request("produkt") );
end if

hvordan sørger jeg for at
<xsl:if test="$pVare != ''">[skriv ud vare]</xsl:if>

først bliver kørt når der er valgt en kategori i dropdownboxen?
Avatar billede nute Nybegynder
23. februar 2004 - 16:08 #8
if( LEN( Request("produkt") ) > 0 ) then
    xslProc.addParameter("pVare", Request("produkt") );
end if

lægger du ind på ASP siden. denne statement sørger for at der kun bliver sat et parameter i din XSL når der er en værdi i 'produkt' parameteret til din ASP side.

inde i din XSL, skal du så lægge ind:

<xsl:parameter name="pVare" />

øverst (lige under <xsl:stylesheet> linjen. denne linje "klargør" din XSL til at tage imod et parameter.

Denne linje:

<xsl:if test="$pVare != ''">[skriv ud vare]</xsl:if>

sørger for at dét der står mellem <xsl:if...> og </xsl:if> kun bliver skrevet ud hvis der er en værdi i parameteret $pVare.

Bemærk ... dit xsl-parameter og "ASP-parameter" skal have det samme navn. med andre ord - hvis du i din xsl skriver:

<xsl:parameter name="mitParameterTilXSL" />

så skal du i din ASP skrive

xslProc.addParameter("mitParameterTilXSL", "en eller anden værdi" );

/nute
Avatar billede kimlarsen1978 Nybegynder
23. februar 2004 - 16:24 #9
ok
skal jeg så sætte action på min for til at hente sig selv igen - så jeg kan få fat i parametren fra dropdownboxen eller skal jeg have flere xsl sider?
Avatar billede nute Nybegynder
23. februar 2004 - 16:29 #10
du bruger den samme xsl. du skal bare lave en event på din select:

<select size="1" name="produkt" onchange="this.form.subit()">

så vil siden postes med det samme du vælger en <option>

alternativt kan du skrive:

<select size="1" name="produkt" onchange="if( this.selectedIndex > 0 ){ this.form.submit() };">

så vil den ikke poste når du velger den første option

/nute
Avatar billede kimlarsen1978 Nybegynder
23. februar 2004 - 17:28 #11
tnx
Jeg kigger på det på onsdag og vender tilbage.
Dette har i hvert fald givet et eller andet
Foreløbig tusind tak
Avatar billede kimlarsen1978 Nybegynder
02. marts 2004 - 16:15 #12
Det virker ikke helt som jeg gerne ville men jeg brugte lidt af du du skrev
skal vi dele de 60 points?
Avatar billede nute Nybegynder
02. marts 2004 - 16:17 #13
fine by me :o]
Avatar billede kimlarsen1978 Nybegynder
05. marts 2004 - 22:38 #14
OK
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester