+ XSLT
Michael
- xml
0 Marko0 Thomas J.S.0 Michael0 Thomas J.S.0 Michael
Hallo,
1. Frage:
----------
XML-Datei:
...
<item>
<q>text text</q>
<a>text text <em>text</em>...</a>
</item>
XSL-Datei:
...
<xsl:template match="item">
<xsl:value-of select="a" />
</xsl:template>
...
Da ich noch ziemlicher Anfänger in Sachen XSL(T) bin ist mir folgendes noch nicht ganz klar: wie schaffe ich es, dass der Text innerhalb von Knoten <a> mit allen Markup-Elementen dargestellt wird? Momentan wird zwar der ganze Text ausgegeben aber _ohne_ die <em> Tags (d.h. sie werden einfach ignoriert).
Was muss ich verändern/beachten, damit auch die <em>'s richtig dargestellt werden?
2. Frage:
---------
Die obige XML-Datei besteht aus vielen <item> Knoten. Ist es möglich über einen URL-Anhang der Form
... demo.xml?item=5
nur den <item>-Knoten anzuzeigen, der die Positions-Nr. 5 (entsprechend dem ?item=) hat? Und gleichzeitig alle anderen auszublenden?
Danke + Grüße
Michael
Hallo,
Du musst den Knoten in das Ausgabedokument kopieren, statt nur den Wert zu nehmen:
<xsl:template match="item">
<xsl:copy-of select="a"/>
</xsl:template>
- Frage:
Dazu kann ich Dir nur ein paar Puzzleteile geben, aber vielleicht helfen Die auch weiter.
Also erstmal musst Du auf die Zahl 5 in der URL Zugreifen können, das geht glaube ich mit xsl:param.
Der Zugriff auf einen bestimmten Knoten erfolgt dann über ein Template mit einem Lokalisierungspfad mit Knotentest:
item[position()=5]
Wie Du da die 5 durch einen Parameter ersetzen kannst weiss ich im Moment auch nicht so genau.
Gruss
Marko
Hallo Marko,
Du musst den Knoten in das Ausgabedokument kopieren, statt nur den Wert zu nehmen:
<xsl:template match="item">
<xsl:copy-of select="a"/>
</xsl:template>
Grandios! Funktioniert prima! danke.
- Frage:
Dazu kann ich Dir nur ein paar Puzzleteile geben, aber vielleicht helfen Die auch weiter.
Also erstmal musst Du auf die Zahl 5 in der URL Zugreifen können, das geht glaube ich mit xsl:param.
Der Zugriff auf einen bestimmten Knoten erfolgt dann über ein Template mit einem Lokalisierungspfad mit Knotentest:item[position()=5]
Wie Du da die 5 durch einen Parameter ersetzen kannst weiss ich im Moment auch nicht so genau.
Danke - probiere ich noch aus.
Grüße
Michael
item[position()=5]
Wie Du da die 5 durch einen Parameter ersetzen kannst weiss ich im Moment auch nicht so genau.
$paramname
Hallo,
- Frage:
Die obige XML-Datei besteht aus vielen <item> Knoten. Ist es möglich über einen URL-Anhang der Form
... demo.xml?item=5
nur den <item>-Knoten anzuzeigen, der die Positions-Nr. 5 (entsprechend dem ?item=) hat? Und gleichzeitig alle anderen auszublenden?
Ja, aber das setzt voraus, dass du deine XML/XSL Transformation serverseitg machst. Die Browser unterstützen beim clientsitigen Transformation keine URL Parmeter.
sonst:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="item" select"''" />
<xsl:template match="/">
<!-- andere dinge fuer die ausgabe -->
<xsl:apply-templates select="item[position() = $item] />
<!-- andere dinge fuer die ausgabe -->
</xsl:template>
<xsl:template match="item">
<!-- Template fuer "item" -->
</xsl:template>
</xsl:stylesheet>
Grüße
Thomas
Hallo,
- Frage:
Die obige XML-Datei besteht aus vielen <item> Knoten. Ist es möglich über einen URL-Anhang der Form
... demo.xml?item=5
nur den <item>-Knoten anzuzeigen, der die Positions-Nr. 5 (entsprechend dem ?item=) hat? Und gleichzeitig alle anderen auszublenden?
Ja, aber das setzt voraus, dass du deine XML/XSL Transformation serverseitg machst. Die Browser unterstützen beim clientsitigen Transformation keine URL Parmeter.
sonst:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:param name="item" select"''" />
<xsl:template match="/">
<!-- andere dinge fuer die ausgabe -->
<xsl:apply-templates select="item[position() = $item] />
<!-- andere dinge fuer die ausgabe -->
</xsl:template><xsl:template match="item">
<!-- Template fuer "item" -->
</xsl:template></xsl:stylesheet>
Aha - dann kann ich die Idee mittels javascript die URl auszulesen und dann entsprechend den xsl:param zu setzen vergessen?
Aber noch was anderes:
wenn ich Deinen <xsl:apply-templates .. /> von oben nehme zeigen sowohl IE 5.5 als auch Moz 1.3 nichts an;
schreibe ich das so:
<xsl:template match="item">
<xsl:if test="position() = $item_num">
<!-- sonstiger inhalt -->
</xsl:if>
</xsl:template>
dann kommt im IE der entsprechende Knoten ($item_num entspricht Deinem "item") aber im Moz wieder nichts??
Warum?
Grüße, Danke
Michael
Hallo,
Aha - dann kann ich die Idee mittels javascript die URl auszulesen und dann entsprechend den xsl:param zu setzen vergessen?
Nein, aber das ist eine wenig "herumhacken", wie das geht steht im archiv, Thomas Meinike hat dazu schon einige Tipps gegeben.
Aber noch was anderes:
wenn ich Deinen <xsl:apply-templates .. /> von oben nehme zeigen sowohl IE 5.5 als auch Moz 1.3 nichts an;
schreibe ich das so:<xsl:template match="item">
<xsl:if test="position() = $item_num">
<!-- sonstiger inhalt -->
</xsl:if>
</xsl:template>dann kommt im IE der entsprechende Knoten ($item_num entspricht Deinem "item") aber im Moz wieder nichts??
Warum?
Das kann ich dir nicht sagen, ohne deinen Code gesehen zu haben.
Grüße
Thomas
Hi,
Aha - dann kann ich die Idee mittels javascript die URl auszulesen und dann entsprechend den xsl:param zu setzen vergessen?
Nein, aber das ist eine wenig "herumhacken", wie das geht steht im archiv, Thomas Meinike hat dazu schon einige Tipps gegeben.
Danke - werde auf die Suche gehen.
Aber noch was anderes:
wenn ich Deinen <xsl:apply-templates .. /> von oben nehme zeigen sowohl IE 5.5 als auch Moz 1.3 nichts an;
schreibe ich das so:<xsl:template match="item">
<xsl:if test="position() = $item_num">
<!-- sonstiger inhalt -->
</xsl:if>
</xsl:template>dann kommt im IE der entsprechende Knoten ($item_num entspricht Deinem "item") aber im Moz wieder nichts??
Warum?
Das kann ich dir nicht sagen, ohne deinen Code gesehen zu haben.
So wie das Beispiel oben nur dass bei sonstiger Inhalt noch mehr html markup kommt.
Zwischendurch hab' ich was anderes versucht: alle items in einen display:none div einschließen und über den window.loc.search den entsprechenden Div anzeigen; allerdings scheint der IE das nur einmal machen zu wollen, denn bei F5 zum Refreshen der Seite kommt dann wieder nichts...
Werde das von Thomas Meinike suchen und nochmals kommen, falls ich weiter Probleme habe.
Soweit. Danke.
Grüße
Michael