Frage zum Wiki-Artikel XML/XSL/XPath/Funktionen: geschweifte Klammern
guest
- frage zum wiki
Im allerletzten Absatz (unparsed-entity-uri()) wird bzgl. der geschweiften Klammern auf XPath-Syntax verwiesen, dort ist aber nichts bzgl. geschweifter Klammern zu finden, fehlt hier etwas?
Hallo guest,
was der Artikel nicht verrät: der Link führt zu XPath, also das, was in den geschweiften Klammern steht.
Was er auch nirgends verrät: die geschweiften Klammern sind Teil von XSLT, nicht von XPath. Leider führt der XSL-Bereich des Wikis nicht auf, was diese geschweiften Klammern sollen. Das aufzuschreiben, ist dem Autor durchgegangen: Wenn Du in einem Template einen XPath-Ausdruck einsetzen willst, um einen Wert abzurufen, dann schreibst Du den in geschweifte Klammern.
Man nennt das Attributwert-Templates, die verwendest Du, wenn Du das Ergebnis eines XPath-Ausdrucks direkt in die Ausgabe übernehmen willst. Das ist einfacher als Attribute mit xsl:attribute hinzuzufügen (wobei ich nicht wirklich Ahnung von XSL habe und mir das gerade selbst anlese). Ich traue mir auch nicht zu, das qualifiziert ins Wiki einzuarbeiten.
Der Text im Wiki ist über 20 Jahre alt; ich habe ihn in einem SelfHTML 8.0 Mirror der Humboldt-Uni in Berlin von 2001 gefunden. Dieser Text wurde nie überarbeitet, und von denen, die sich ums Wiki kümmern, vermutlich auch nie wirklich erfasst. Matthias hat ihn 2015 einfach aus dem alten SelfHTML ins Wiki übernommen.
Der Umstand, dass dieser Text eigentlich nie überarbeitet wurde, also sozusagen write-only ist, dürfte eine Menge über seine Relevanz besagen 😉.
Aber ich mag da auch einfach nur ein Ignorant sein und es gibt eine lebendige XSL-Community (die sich hier im Forum aber zwei Personen beschränkt: eine, die Fragen stellt und eine, die darauf Antworten weiß).
Rolf
Hallo Rolf,
so - ich habe im Wiki fleißig editiert und das Thema Attributwert-Templates näher beleuchtet.
Rolf
Hallo an alle XSLT Kenner,
sind die folgenden XSLT-Konstrukte gleichwertig? Oder gibt es da Bedeutungsunterschiede - abgesehen von möglichem Unfug, den ich in meiner XML Unkenntnis verzapft haben könnte...
Ich möchte im Wiki gern etwas hinzufügen, um die Frage des TO zu klären . aber keinen Unsinn schreiben.
(1) src Attribut explizit hinzufügen, mit explizitem value-of
<xsl:template match="bild">
<img>
<xsl:attribute name="src"><xsl:value-of select="@quelle" /></xsl:attribute>
</img>
</xsl:template>
(2) src Attribut explizit hinzufügen, mit Wert via select-Attribut
<xsl:template match="bild">
<img>
<xsl:attribute name="src" select="@quelle" />
</img>
</xsl:template>
(3) src Attribut inline hinzufügen, mit Wert via Attributwert-Template
<xsl:template match="bild">
<img src="{@quelle}" />
</xsl:template>
Rolf
Hallo Rolf,
sind die folgenden XSLT-Konstrukte gleichwertig?
Nein:
Oder gibt es da Bedeutungsunterschiede - abgesehen von möglichem Unfug, den ich in meiner XML Unkenntnis verzapft haben könnte …
„Unfug“ würde ich das jetzt nicht nennen wollen …
(2) src Attribut explizit hinzufügen, mit Wert via select-Attribut
<xsl:template match="bild"> <img> <xsl:attribute name="src" select="@quelle" /> </img> </xsl:template>
xsl:attribute
besitzt kein select
-Attribut.
Ich habe die drei Beispiele für dich gerade einmal ausprobiert:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="bild">
<img>
<xsl:attribute name="src"><xsl:value-of select="@quelle"/></xsl:attribute>
</img>
<img>
<xsl:attribute name="src" select="@quelle"/>
</img>
<img src="{@quelle}"/>
</xsl:template>
</xsl:stylesheet>
angewendet auf
<?xml version="1.0"?>
<bild quelle="test"/>
ergibt
<?xml version="1.0"?>
<img src="test"/><img src=""/><img src="test"/>
Viele Grüße
Robert
Hallo Robert,
xsl:attribute besitzt kein select-Attribut.
Doch - ich habe nur keine Ahnung, wie weit XSLT 2 unterstützt wird.
In XSLT 1 gibt's das nicht, da hast Du recht.
Ich probiere gerade mit dem XSLTProcessor Objekt rum das in Chrome eingebaut ist - und jetzt, wo ich deine Antwort sehe, komme ich da an den gleichen Punkt: geht nicht.
Scheinbar implementieren die nur XSLT 1.
Wer XSLT 2 will, scheint um Saxon-JS nicht herumzukommen. Immerhin gratis, solange man keinen Supportvertrag will. Aber das Ding bau ich jetzt nicht an...
Rolf