bedingte Transformation
Gunnar Bittersmann
- xsl
Hello out there!
Ist es möglich, dass das aufrufende (PHP-)Script an die Transformation einen Parameter übergibt?
Dass man wenn man http://example.net/list?sort=givenname aufruft, die Liste nach Vornamen sortiert bekommt, bei http://example.net/list?sort=familyname nach Familiennamen, im XSLT also sowas inder Art:
<xsl:choose>
<xsl:when ... = "givenname">
<xsl:sort select="foaf:givenname"/>
</xsl:when>
<xsl:when ... = "familyname">
<xsl:sort select="foaf:family_name"/>
</xsl:when>
</xsl:choose>
See ya up the road,
Gunnar
Hi,
Ist es möglich, dass das aufrufende (PHP-)Script an die Transformation einen Parameter übergibt?
Das dürfte vom XSLT-Prozessor abhängen.
Dass man wenn man http://example.net/list?sort=givenname aufruft, die Liste nach Vornamen sortiert bekommt, bei http://example.net/list?sort=familyname nach Familiennamen, im XSLT also sowas inder Art:
xsl:param dürfte Dich interessieren.
cu,
Andreas
Hello out there!
Ist es möglich, dass das aufrufende (PHP-)Script an die Transformation einen Parameter übergibt?
Das dürfte vom XSLT-Prozessor abhängen.
Hm, ginge es bei Sablotron? Und wie bekäme ich den Parameter von außen ins XSLT rein?
xsl:param dürfte Dich interessieren.
Ja, für die richtige Verschachtelung, wie Thomas sagte.
See ya up the road,
Gunnar
Hallo,
Ist es möglich, dass das aufrufende (PHP-)Script an die Transformation einen Parameter übergibt?
Das dürfte vom XSLT-Prozessor abhängen.
Hm, ginge es bei Sablotron? Und wie bekäme ich den Parameter von außen ins XSLT rein?
$xslt = xslt_create();
$xml = 'test.xml';
$xsl = 'test.xsl';
$xslt_params["sort"] = $HTTP_GET_VARS["sort"];
$result = xslt_process($xslt, $xml, $xsl, NULL, NULL, $params);
Oder so:
http://www.php.net/manual/en/function.xslt-process.php#39701
Grüße
Thomas
Hello out there!
Hm, ginge es bei Sablotron? Und wie bekäme ich den Parameter von außen ins XSLT rein?
$xslt = xslt_create();
$xml = 'test.xml';
$xsl = 'test.xsl';
$xslt_params["sort"] = $HTTP_GET_VARS["sort"];
Ich stell mich noch zu blöd an.
Wie habe ich im XSLT Zugriff auf den Parameter? So offenbar nicht:
<xsl:param name="sort"/>
<p>Parameter: <xsl:value-of select="$sort"/></p>
See ya up the road,
Gunnar
Hallo,
Hm, ginge es bei Sablotron? Und wie bekäme ich den Parameter von außen ins XSLT rein?
$xslt = xslt_create();
$xml = 'test.xml';
$xsl = 'test.xsl';
$xslt_params["sort"] = $HTTP_GET_VARS["sort"];Ich stell mich noch zu blöd an.
Wie habe ich im XSLT Zugriff auf den Parameter? So offenbar nicht:
<xsl:param name="sort"/>
<p>Parameter: <xsl:value-of select="$sort"/></p>
Aber genau so sollte es sein!
Eventuell an der Zeile :$xslt\_params["sort"] = $HTTP\_GET\_VARS["sort"]; was ändern bzw. sie überprüfen, damit du die HTTP-Variable wirklich bekommst -->
<http://at.php.net/manual/de/reserved.variables.php#reserved.variables.get>
Grüße
Thomas
Hi,
<xsl:param name="sort"/>
<p>Parameter: <xsl:value-of select="$sort"/></p>
>
> Aber genau so sollte es sein!
Verwechsle ich jetzt was, oder müßte es <xsl:value-of select="{$sort}"/> heißen? Also mit {} um den Parameter?
cu,
Andreas
--
[Warum nennt sich Andreas hier MudGuard?](http://MudGuard.de/)
[Schreinerei Waechter](http://www.schreinerei-waechter.de/)
[O o ostern ...](http://ostereier.andreas-waechter.de/)
Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
Hello out there!
Verwechsle ich jetzt was, oder müßte es <xsl:value-of select="{$sort}"/> heißen? Also mit {} um den Parameter?
Dann geht gar nichts mehr.
See ya up the road,
Gunnar
Hello out there!
Aber genau so sollte es sein!
Eventuell an der Zeile :$xslt_params["sort"] = $HTTP_GET_VARS["sort"]; was ändern bzw. sie überprüfen, damit du die HTTP-Variable wirklich bekommst
Die bekomme ich: http://gundi.de/test/xslt-param.php?sort=foo
$HTTP_GET_VARS["sort"] »foo«
<xsl:value-of select="$sort"/> »«
<xsl:value-of select="{$sort}"/>
xslt-param.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test: XSLT mit Parameter</title>
<link rel="stylesheet" type="text/css" href="xslt-param.css" />
</head>
<body>
<table>
<tr>
<th>$HTTP_GET_VARS["sort"]</th>
<td>»<?php [code lang=php]echo $HTTP_GET_VARS["sort"];
~~~ ?>«</td>
</tr>
<tr>
<th><xsl:value-of select="$sort"/></th>
<?php
~~~php
$xslt = xslt_create();
$xml = 'xslt-param.xml';
$xsl = 'xslt-param.xsl';
$xslt_params["sort"] = $HTTP_GET_VARS["sort"];
$result = xslt_process($xslt, $xml, $xsl, NULL, NULL, $params);
xslt_free($xslt);
echo $result;
?>
</tr>
<tr>
<th><xsl:value-of select="{$sort}"/></th>
<?php
$xslt = xslt_create();
$xml = 'xslt-param.xml';
$xsl = 'xslt-param-braces.xsl';
$xslt_params["sort"] = $HTTP_GET_VARS["sort"];
$result = xslt_process($xslt, $xml, $xsl, NULL, NULL, $params);
xslt_free($xslt);
echo $result;
?>
</tr>
</table>
</body>
</html>[/code]
xslt-param.xsl:
<xsl:stylesheet version="1.0"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output
xsl:encoding="UTF-8"
xsl:indent="no"
xsl:method="xml"
xsl:omit-xml-declaration="yes"
xsl:standalone="no"
/>
<xsl:param name="sort"/>
<xsl:template match="/">
<td>
<xsl:text>»</xsl:text>
<xsl:value-of select="$sort"/>
<xsl:text>«</xsl:text>
</td>
</xsl:template>
</xsl:stylesheet>
in xslt-param-braces.xsl:
<xsl:value-of select="{$sort}"/>
See ya up the road,
Gunnar
Hallo,
$xslt_params["sort"] = $HTTP_GET_VARS["sort"];
^^^^^^^^^^^^
$result = xslt_process($xslt, $xml, $xsl, NULL, NULL, $params);
^^^^^^^^^^^^^^
Ich bin zwar kein PHP-Experte, aber ich würde meinen, dass du schon die richtige Variable verwenden müsstest!
Grüße
Thomas
PS: <xsl:value-of select="{$sort}"/> ist Blödsinn.
Hello out there!
$xslt_params["sort"] = $HTTP_GET_VARS["sort"];
^^^^^^^^^^^^
$result = xslt_process($xslt, $xml, $xsl, NULL, NULL, $params);
^^^^^^^^^^^^^^
Ich bin zwar kein PHP-Experte, aber ich würde meinen, dass du schon die richtige Variable verwenden müsstest!
Argl, warum sagstes mir dann erst falsch? Kann man denn nicht mal mehr dir blindlings trauen?
PS: <xsl:value-of select="{$sort}"/> ist Blödsinn.
Kann man nicht nicht mal mehr MudGuard trauen?
See ya up the road,
Gunnar
PS: Nichts von alledem soll in irgendeiner Weise ein Vorwurf sein; alles ';-)' und 'SCNR'.
Kaum macht man’s richtig, schon geht’s. Danke.
Hi,
PS: <xsl:value-of select="{$sort}"/> ist Blödsinn.
Ok - ich hab ja extra vorsichtig formuliert, weil ich mir nicht sicher war, hab schon wieder zu lange kein XSLT gemacht.
Kann man nicht nicht mal mehr MudGuard trauen?
Nach Ausbau der doppelten Verneinung ergibt sich:
Kann man mal mehr MudGuard trauen?
Ja, kann man - mal mehr, mal weniger ;-)
cu,
Andreas
Hallo,
^^^^^^^^^^^^^^
Ich bin zwar kein PHP-Experte, aber ich würde meinen, dass du schon die richtige Variable verwenden müsstest!
Argl, warum sagstes mir dann erst falsch? Kann man denn nicht mal mehr dir blindlings trauen?
Weil es hier selberdenken heisst *fg* ;-)
Kaum macht man’s richtig, schon geht’s. Danke.
Fein :)
Grüße
Thomas
Hallo,
Ist es möglich, dass das aufrufende (PHP-)Script an die Transformation einen Parameter übergibt?
Dass man wenn man http://example.net/list?sort=givenname aufruft, die Liste nach Vornamen sortiert bekommt, bei http://example.net/list?sort=familyname nach Familiennamen, im XSLT also sowas inder Art:
<xsl:when ... = "givenname">
<xsl:sort select="foaf:givenname"/>
</xsl:when>
<xsl:when ... = "familyname">
<xsl:sort select="foaf:family_name"/>
</xsl:when>
</xsl:choose>
Das ist so definitiv nicht möglich.
xsl:sort muss als erstes Kind vom xsl:for-each oder vom xsl:apply-templates stehen.
Also:
param name="sort" /
...
when test="$sort = 'givenname'"
apply-templates select=...
sort select="foaf:givenname"
/apply-templates
when test="$sort = 'familyname'"
for-each select=...
sort select="foaf:family\_name"
...
/for-each
otherwiese
...
Grüße
Thomas