XSLT: template wird nicht
lebendige_hose
- xsl
Hi Leute,
ich schreibe gerade ein XML zur Gebäudedarstellung, wo die einzelnen Bereiche absolut positioniert auf dem Bildschirm erscheinen. Dazu schreibe ich ein XSLT, zur Übersetzung in HTML, weil
1. Die alten, nicht XML-fähigen Browser die Seite ja auch darstellen sollen.
2. Der IE CSS nicht genug interpretiert, um damit XML-Daten gut darzustellen:
a) Der Explorer interpretiert ja keine Attributsselektoren. Doch so schreibe ich in HTML die NMTOKEN-Daten einfach ins Klassenattribute.
b) Mit CSS kann ich die Attribute nur mit Content darstellen, was der IE (noch [ich bin ja Optimist ;-)]) nicht unterstützt. Und so schreibe ich die Attributnamen einfach in eine 'value-of'-Anweisung, und wenn ich das serverseitig mache, checkt das sogar der *ümmste IE.
Doch da gibts ein kleines Problemchen: Die untergeordneten Templates werden nicht eingebunden, obwohl ein <http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#apply_templates@title=<apply-templates />> vorliegt.
Hier die Beispiele ('Kein' & 'Rhein' hab ich nur zur Demo reingerschrieben):
.: Beispiel-XML mit interner DTD und eingebundenem XSLT
.: Nacktes XSLT mit Kommentaren
Die CSSs habe ich nicht nur teilweise online, weil sie eigentlich unwichtig sind.
lg eure hose
Hallo lebendige_hose,
Doch da gibts ein kleines Problemchen: Die untergeordneten Templates werden nicht eingebunden, obwohl ein <http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#apply_templates@title=<apply-templates />> vorliegt.
Es müssen nicht nur Templates vorliegen, sondern diese müssen beim Aufruf mittels xsl:apply-temples auch im aktuellen Kontext passen. Ein Element treppe sehe ich beispielsweise nicht und auch kein Attribut klasse.
BTW: Ein Konstrukt wie
<div><xsl:attribute name="class"><xsl:value-of select="concat('treppe ', @klasse)" /></xsl:attribute></div>
lässt sich bequemer und lesbarer formulieren:
<div class="treppe {@klasse}"></div>
Grüße,
Thomas
Hi,
Doch da gibts ein kleines Problemchen: Die untergeordneten Templates werden nicht eingebunden, obwohl ein <http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#apply_templates@title=<apply-templates />> vorliegt.
Es müssen nicht nur Templates vorliegen, sondern diese müssen beim Aufruf mittels xsl:apply-temples auch im aktuellen Kontext passen. Ein Element treppe sehe ich beispielsweise nicht und auch kein Attribut klasse.
Danke, das habe ich ganz übersehen, auch restlichen, nicht onlinen Teil des Bsp.s habe ich das immer nur als 'treppengr' oder als Child von 'gruppe' verwendet. An das habe ich garnicht gedacht.
BTW: Ein Konstrukt wie
<div><xsl:attribute name="class"><xsl:value-of select="concat('treppe ', @klasse)" /></xsl:attribute></div>
lässt sich bequemer und lesbarer formulieren:
<div class="treppe {@klasse}"></div>
Ja, hast recht!
Noch was: Kennst du eine Möglichkeit folgendes zu formulieren:
<xsl:template match="/gebäude/ebene/treppe" und-matche-auch="/gebäude/ebene/treppe" />
Vieln Dank für deine Hilfe!
lg deine hose
Grüße,
Thomas
Hallo lebendige_hose,
Noch was: Kennst du eine Möglichkeit folgendes zu formulieren:
<xsl:template match="/gebäude/ebene/treppe" und-matche-auch="/gebäude/ebene/treppe" />
Das sind offenbar dieselben Nodesets, aber vermutlich suchst Du den Union-Operator | (also etwas wie "x | y").
Grüße,
Thomas
Hallo lebendige_hose,
Noch was: Kennst du eine Möglichkeit folgendes zu formulieren:
<xsl:template match="/gebäude/ebene/treppe" und-matche-auch="/gebäude/ebene/treppe" />Das sind offenbar dieselben Nodesets, aber vermutlich suchst Du den Union-Operator | (also etwas wie "x | y").
Grüße,
Thomas
Hi Thomas,
soetwas wie <xsl:template match='("/gebäude/ebene/treppe" | "/gebäude/ebene/treppe")' /> gibts?!
lg hose
Hallo lebendige_hose,
soetwas wie <xsl:template match='("/gebäude/ebene/treppe" | "/gebäude/ebene/treppe")' /> gibts?!
Es müssen schon Knoten(mengen) sein und keine Strings, also in der Form match="nodeset1 | nodeset2".
Grüße,
Thomas
Hallo Thomas,
soetwas wie <xsl:template match='("/gebäude/ebene/treppe" | "/gebäude/ebene/treppe")' /> gibts?!
Es müssen schon Knoten(mengen) sein und keine Strings, also in der Form match="nodeset1 | nodeset2".
Grüße,
Thomas
Aha!
lg leb._hose