1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

XSLT - Transformation, Formatierung

    • Frage
  • Pee
  • 7. Oktober 2003 um 09:23
  • Unerledigt
  • Pee
    2
    Pee
    Mitglied
    Punkte
    15
    Beiträge
    2
    • 7. Oktober 2003 um 09:23
    • #1

    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ü

    "contra ventum non navigandum est"
    - RQuadratIstPeeViertel -


    also visit:

    http://www.lugsp.at

  • Ordovicium
    19
    Ordovicium
    Mitglied
    Reaktionen
    23
    Punkte
    3.693
    Artikel
    13
    Beiträge
    569
    • 8. Oktober 2003 um 16:55
    • #2

    xslt ist ja eigentlich nix anderes als css für xml. Nur ein bischen umständlicher halt.

    Hier ein Bsp. für <antwort>

    HTML
    <?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>
    Alles anzeigen

    Ich entschuldige mich gleich für etwaige Denkfehler, weil wir es auch gerade erst auf der FH lernen.

  • AntiBit
    13
    AntiBit
    Mitglied
    Reaktionen
    2
    Punkte
    1.712
    Beiträge
    297
    • 9. Oktober 2003 um 01:10
    • #3

    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 :grinning_squinting_face:

    Das geht ca. so.

    Code
    <xsl:for-each select="./text">
     
    	 <xsl:choose>
    	 <xsl:when test="contains(.,'&quot;')">
    	 <!-- 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,'&quot;')"/>
    <xsl:variable name="string_helper" select="substring-after($text,'&quot;')"/>
    <xsl:variable name="string_in_quotes" select="substring-before($string_helper,'&quot;')"/>
    <xsl:variable name="string_after_quotes" select="substring-after($string_helper,'&quot;')"/>
     
    <xsl:if test="not(starts-with($text,'&quot;'))">
    <xsl:value-of select="$string_before_quotes"/>
    </xsl:if>
     
    <xsl:choose>
    <xsl:when test="contains($string_helper,'&quot;')">
    	"<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,'&quot;')">
    <!-- 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>
    Alles anzeigen



    Noch Fragen? :winking_face:

    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

    Hätten uns Spiele wie Pac-Man in unserer Jugend beeinflusst, würden wir heute durch dunkle Räume irren, elektronische Musik hören und Pillen fressen.

  • Mihi
    8
    Mihi
    Mitglied
    Reaktionen
    1
    Punkte
    641
    Beiträge
    111
    • 9. Oktober 2003 um 09:32
    • #4
    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

    The Brain: Pinky, are you pondering what I’m pondering?
    Pinky: I think so Brain, but if you replace the P with an O, my name would be Oinky, wouldn’t it?

  • Pee
    2
    Pee
    Mitglied
    Punkte
    15
    Beiträge
    2
    • 9. Oktober 2003 um 14:29
    • #5

    ...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

    "contra ventum non navigandum est"
    - RQuadratIstPeeViertel -


    also visit:

    http://www.lugsp.at

  • Maximilian Rupp 27. Dezember 2024 um 12:08

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern