Gutn Morgen!
Folgendes Szenario: Ich habe ein selbst erstelltes XML-File vorliegen, in dem ich meine ganzen Daten für einen Kreuzerltest abgespeichert habe, d.h. es kommt immer wieder die selbe Struktur darin vor, "Bezug", "Frage", "Antworten". Nun will ich die Testfragen in einer für Kreuzerltests angebrachten Form als HTML ausgeben, was ich auch mit einem XSLT-Stylesheet ganz locker bewerkstellige, aber da Hund liegt im Detail:
Ihr kennt das sicher aus z.Bsp. einem O´Reilly Buch oder sonstirgendwas, was euch schon mal untergekommen ist, ich habe den Fragentext in dem Wasweisichwieviele UNIX-Kommandos vorkommen und die möchte man nun hervorheben, indem man Sie nicht in Arial/Helvetica sondern in Courier schreibt, und außerdem noch kursiv, usw. usw. Der eigentliche Text der Frage soll davon aber unberührt bleiben. Frage: wie teil ich dem XSLT-Prozessor mit, daß sich an einer bestimmten Stelle im Text die Formatierung ändern soll (oder daß zum Beispiel ein Zeilenumbruch stattfinden soll).
Beispiel:
im XML File:
<frage>
<text>Was bewirkt das Kommando "/sbin/foo"?</text>
<loesung>
<antwort>nix</antwort>
<antwort>irgendwas</antwort>
<antwort>weisnich</antwort>
</loesung>
</frage>
SOLL nach der XSL Transformation:
Was bewirkt das Kommando "/sbin/foo"?
1. nix
2. irgendwas
3. weisnich
Bitte um eure Hilfe!
salü
XSLT - Transformation, Formatierung
-
- Frage
-
Pee -
7. Oktober 2003 um 09:23
-
-
xslt ist ja eigentlich nix anderes als css für xml. Nur ein bischen umständlicher halt.
Hier ein Bsp. für <antwort>
HTML
Alles anzeigen<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="frage"> <html> <head> <title>Umfrage</title> </head> <body> <xsl:for-each select="loesung/antwort"> <i> <xsl:value-of select="."/> </i><br/> </xsl:for-each> </body> </html> </xsl:template>
Ich entschuldige mich gleich für etwaige Denkfehler, weil wir es auch gerade erst auf der FH lernen.
-
Hi.
Was Ordovicium geschrieben hat sieht ziemlich gut aus für die Formatierung der Antworten.
Das was du mit den Unix-Commandos vorhast, von wegen andere Schriftart usw., ist aber wesentlich schwieriger und ziemlich tricky
Das geht ca. so.
Code
Alles anzeigen<xsl:for-each select="./text"> <xsl:choose> <xsl:when test="contains(.,'"')"> <!-- Benanntes Template mit Parameter für Text mit Quotes aufrufen --> <xsl:call-template name="formatQuotedText"> <xsl:with-param name="text"> <xsl:value-of select="."/> </xsl:with-param> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="."/> </xsl:otherwise> </xsl:choose> </xsl:for-each> <xsl:template name="formatQuotedText"> <xsl:param name="text"/> <xsl:variable name="string_before_quotes" select="substring-before($text,'"')"/> <xsl:variable name="string_helper" select="substring-after($text,'"')"/> <xsl:variable name="string_in_quotes" select="substring-before($string_helper,'"')"/> <xsl:variable name="string_after_quotes" select="substring-after($string_helper,'"')"/> <xsl:if test="not(starts-with($text,'"'))"> <xsl:value-of select="$string_before_quotes"/> </xsl:if> <xsl:choose> <xsl:when test="contains($string_helper,'"')"> "<Font Face="Courier"><i><xsl:value-of select="$string_in_quotes"/></i></Font>" </xsl:when> <xsl:otherwise> "<Font Face="Courier"><i><xsl:value-of select="$string_helper"/></i></Font>" </xsl:otherwise> </xsl:choose> <xsl:choose> <xsl:when test="contains($string_after_quotes,'"')"> <!-- Rekursiver Aufruf, wenn nötig um weiter Quotes zu highliten --> <xsl:call-template name="highlightQuotedText"> <xsl:with-param name="text"> <xsl:value-of select="$string_after_quotes"/> </xsl:with-param> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$string_after_quotes"/> </xsl:otherwise> </xsl:choose> </xsl:template>
Noch Fragen?
Das hab ich mal für eine Übung gebraucht, hat etwas lange gebraucht bis ich da drauf gekommen bin, aber hat dann super funktioniert hehe. Das ist auch genau das was du suchst um die Unix-Befehle anders als alles andere zu formatieren.
Gruss,
AntiBit -
Zitat von Ordovicium
xslt ist ja eigentlich nix anderes als css für xml. Nur ein bischen umständlicher halt.
Das ist jetzt aber schon seeeehr weit hergeholt? :p
Ich kann zum Thread noch diese Seite beitragen: http://www.zvon.org dort sind viele Referenzen, Tutorials etc. rund um XML und den zugehörigen Standards (auch mit vielen Beispielen).
Michi
-
...hätte nicht damit gerechnet, daß mir hier jemand gleich nen fixfertigen Code hinschnalzt, aber dank dir, echt Klasse! :thumb:
Hab den Code zwar noch nicht ganz durchblickt, aber das Prinzip mit den Marken ist mir jetzt klar. Werd das gleich mal in mein Stylesheet einbauen und testen. Wenns nicht funzt, komm ich halt wieder raunzen.
Danke, an alle die gepostet haben.
lG
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!