HTML in <xsl:value-of>

sve07bl

Mitglied
Hallo,

habe leider wieder ein XSL-Problem:

Ich lese etwas aus und zwar:
Code:
<xsl:value-of select="Titel"/>

In diesem Titel steht folgendes drin:
Code:
<Titel>Hallo <br></br> das ist ein Test</Titel>

Wenn ich jetzt mein XML File transformiere, bekomme ich nicht mein gewünschtes Ergebnis.

Ich hätte jetzt gerne, dass das XSL diese HTML-Zeichen in meinem Tag interpretiert und auch ausgibt. Leider funktioniert das nicht.

Freue mich auf Hilfe,

Gruß Björn
 
Hi.
Ich hätte jetzt gerne, dass das XSL diese HTML-Zeichen in meinem Tag interpretiert und auch ausgibt.
Der XSL Prozessor interpretiert die Tags die in dem Titel stehen natürlich, deswegen gibt er sie ja nicht aus - weil du dafür keine Regel angegeben hast.

Normalerweise werden nur die Textknoten ausgegeben, die Elementknoten werden nur in die Ausgabe übernommen wenn man das explizit angegeben hat.

XML:
<xsl:apply-template select="./title">
...
<xsl:template match="title">
  <xsl:for-each select="child::node()">
    <xsl:copy-of select="."/>
  </xsl:for-each>
</xsl:template>

Gruß
 
Zuletzt bearbeitet von einem Moderator:
Ich glaube du hattest mich falsch verstanden:

Das hier ist mein Code im XSL-File:
Code:
<xsl:for-each select="Knoten">
       <xsl:value-of select="Test"/>
</xsl:for-each>

Das ist der Inhalt meines XML (Auszug):
Code:
<Knoten>
  <Test>Das hier ist <br></br> eine Probe </Test>
<Knoten>

So und ich möchte dass es nun so rauskommt:
HTML:
Das hier ist 
eine Probe

Es kommt aber leider so raus:
Code:
Das hier ist <br></br> eine Probe

Gruß Björn
 
Ich glaube du hattest mich falsch verstanden
Ich glaube du hast dein Problem schlecht erklärt.

Das <br> Tag hat nur für einen (X)HTML Browser eine Bedeutung. Der erzeugt dann beim Rendern an dieser Stelle einen Zeilenumbruch.

Wenn du dort einen Zeilenumbruch willst, mußt du einfach nur statt einem <br> Tag einen Zeilenumbruch ausgeben.

Gruß
 
Ok, soweit richtig (ich bekomme immer vorgeworfen ich könnte net erklären)
:)

Aber wie geht das jetzt? Zeilenumbruch machen?
Ich mache doch mit <br> einen Zeilenumbruch.
 
Nein, du machst mit <br> keinen Zeilenumbruch wie ich eben erklärt habe, da <br> überhaupt keine Bedeutung in XML hat.

Um einen Zeilenumbruch im Ausgabedokument zu haben (was nur sinnvoll bei der Ausgabemethode "text" ist oder in einem präformatierten Bereich) muß man das Zeichen mit der Nr. 13 ausgeben.

In XML kann man dieses Zeichen als &#10; schreiben.

Da in XML Leerzeichen keine Rolle spielen, muß man explizit angeben, das Text ausgegeben werden soll:
XML:
<xsl:template match="br">
  <xsl:text>
</xsl:text>
<xsl:/template>

Man kann auch statt dem &#10; einfach einen Zeilenumbruch in das xsl:text Element einfügen.

Gruß
 
Zuletzt bearbeitet von einem Moderator:
das versteh ich echt nicht.

tut mir leid, gibt es keine einfache möglichkeit, dass irgendwie umzusetzen.

einfach nur, dass ich schon ins xml ein &#13 reinschreiben kann und es dann richtig passt?
 
das versteh ich echt nicht.
Wieso nicht? Es ist egal ob du Leerzeichen verwendest oder nicht, ob du nun 2 oder 500 Zeilenumbrüche machst. In XML spielt das keine Rolle.

tut mir leid, gibt es keine einfache möglichkeit, dass irgendwie umzusetzen.
Das ist doch sehr einfach. Alle <br> Tags werden in der Ausgabe durch einen Zeilenumbruch ersetzt.

einfach nur, dass ich schon ins xml ein &#13 reinschreiben kann und es dann richtig passt?
Nein, ein einzelnes solches Zeichen innerhalb eines Tags bringt nichts, erst wenn da noch Text dazu käme.

Gruß
 

Neue Beiträge

Zurück