Parameteruebergabe an XSL
markus
- xsl
0 Thomas J.S.0 markus0 MudGuard0 markus
0 Thomas J.S.0 markus
hallo leute,
kann man beim aufruf einer xml datei auch parameter uebergen, die dann von der xslt-datei gelesen werden koennen?
mein problem:
habe eine dtd wo ein element page definiert ist. dieses elemnt enthaelt wieder andere elemente. ich moechte realisieren, dass jeweils nur die informationen eines page-elementes angezeigt werden und dass aber gleichzeitig auch eine navigation generiert wird wo fuer jede page ein link vorhanden ist. es wird quasi immer die gleiche xml-datei aufgerufen, nur eben mit einem parameter wo festgelegt ist, welches page element angezeigt werden soll.
meine dtd:
<!ELEMENT fotobook (page)*>
<!ELEMENT page (entry | id)*>
<!ELEMENT entry (image | text | date)*>
<!ELEMENT image (image_url | image_desc)*>
<!ELEMENT image_url (#PCDATA)>
<!ELEMENT image_desc (#PCDATA)>
<!ELEMENT text (#PCDATA)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT id (#PCDATA)>
besten dank und gruss, def
Hallo,
kann man beim aufruf einer xml datei auch parameter uebergen, die dann von der xslt-datei gelesen werden koennen?
Ja, in der URL.
mein problem:
ich moechte realisieren, dass jeweils nur die informationen eines page-elementes angezeigt werden
z.B. URL : http://www.domain.de/datei.xml?page=p123
in der XSL Datei (nur skizziert!):
<xsl:param name="page" select="''" />
...
<xsl:apply-templates select="page[@id = $page]" />
»»und dass aber gleichzeitig auch eine navigation generiert wird wo fuer jede page ein link vorhanden ist.
<xsl:template match="page" mode="navigation>
<a href="datei.xml?page={@id}">
<xsl:value-of select=" .... "/>
</a>
</xsl:template>
aufruf:
<xsl:apply-templates mode="navigation" />
Grüße
Thomas
he thomas,
vielen dank für die antwort. dank deiner codebeispiele hab ich die navigation und so hinbekommen und er selektiert auch die richtigen einträge aus der entsprechenden 'page', nur den übergebenen parameter liesst er nicht ein?
das ist doch der dazugehörige aufruf, oder?
<xsl:param name="page" select="''" />
für select setze ich dann 1 (default). leider stellt er dann immer die einträge aus seite 1 dar, auch wenn ich www.blabla.de/datei.xml&page=2 als url aufrufe.
[
<xsl:param name="XXX" select="''" />
www.blabla.de/datei.xml$YYY=2
muss XXX gleich YYY sein?
]
sorry, hab gestern angefangen mich mit dem kram zu beschäftigen und seh noch nicht ganz durch.
danke und gruss, markus
Hi,
für select setze ich dann 1 (default). leider stellt er dann immer die einträge aus seite 1 dar, auch wenn ich
www.blabla.de/datei.xml&page=2 als url aufrufe.
^
? trennt den Query-String von der URL, & trennt die einzelnen Parameter
<xsl:param name="XXX" select="''" />
www.blabla.de/datei.xml$YYY=2
muss XXX gleich YYY sein?
Wenn es sich um den Parameter des selben Namen handeln soll: ja.
Und statt $ natürlich ?, siehe oben.
cu,
Andreas
hi,
ich raffs nicht.
hier mein code:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!--
hier weise ich der variablen pageID den im URL übergebenen wert zu.
!-->
<xsl:param name="pageID" select="'1'" />
[...]
<xsl:for-each select="fotobook/page">
<!--
und hier frage ich die variable ab.
!-->
<xsl:if test="id = $pageID">
<xsl:for-each select="entry">
[...]
</xsl:template>
</xsl:stylesheet>
die if-abfrage haut hin, aber er benutzt halt immer den default wert, der oben in <xsl:param name="pageID" select="'1'" /> zugewiesen wird.
der URL sieht folgendermassen aus: www.blabla.de/data.xml?pageID=1
wo liegt der fehler???
danke, markus
Hallo Markus,
nur den übergebenen parameter liesst er nicht ein?
das ist doch der dazugehörige aufruf, oder?
<xsl:param name="page" select="''" />
für select setze ich dann 1 (default). leider stellt er dann immer die einträge aus seite 1 dar, auch wenn ich
www.blabla.de/datei.xml&page=2 als url aufrufe.
an der ersten stelle bitte nicht & sonder ? verwenden
www.blabla.de/datei.xml?page=2&andereprameter=anderewert&usw=usf
Ich gehe davon aus, dass du dein XML serverseitig verarbeitest: machst du ein dirket im Browser (IE oder Mozialle) geht das nicht, sie (bzw. deren Parser) können keine Parameter aus URLs verarbeiten.
[
<xsl:param name="XXX" select="''" />
www.blabla.de/datei.xml$YYY=2
muss XXX gleich YYY sein?
]
Ja es muss. Du muss den Namen des Parametes übergeben, wenn du im XSL den Paramternamen mit XXX bestimmt hast und in der URL YYY als Parametername übergibst, wird das nicht erkannt denn du hast YYY in deinem XSL nicht definiert.
Grüße
Thomas
hallo,
Ich gehe davon aus, dass du dein XML serverseitig verarbeitest: machst du ein dirket im Browser (IE oder Mozialle) geht das nicht, sie (bzw. deren Parser) können keine Parameter aus URLs verarbeiten.
ich dachte das die browser das können. mhm, dann wird das wohl der grund sein, warum es nicht funzt.
was muss gegeben sein, dass das xml serverseitig verarbeitet werden kann? also erst mal muss ich nen server finden der das macht nehm ich an (logikbonus...) und muss ich dann auch die dateien, also datei.xml, datei.dtd und datei.xsl irgendwie anpassen, dass die serverseitig verarbeitet werden können?
schon mal vielen dank für die nette hilfe bis hierher. hat mir auf jeden fall weitergeholfen.
beste grüsse, markus
Hallo Markus,
ich dachte das die browser das können. mhm, dann wird das wohl der grund sein, warum es nicht funzt.
Vielleicht Version 9.04 der Browser wird das machen.
was muss gegeben sein, dass das xml serverseitig verarbeitet werden kann? also erst mal muss ich nen server finden der das macht nehm ich an (logikbonus...) und muss ich dann auch die dateien, also datei.xml, datei.dtd und datei.xsl irgendwie anpassen, dass die serverseitig verarbeitet werden können?
Alle wege führen - angeblich - nach Rom, zumindest aber irgendwohin:
Serverseitig ginge es
An deiner Dateien muss du eigentlich kaum bis nichts ändern.
Grüße
Thomas
PS: es wäre u.U. auch möglich, dass du JavaScript und DOM (nur mit dem IE) verwendest um eine Variable dem XSL-Sheet übergibst, dazu gibt es schon viele Beiträge von Thomas Meineke im Archiv.