Wie haben xsl:function-return einen string-Wert, einschließlich der html-tags
Ich bin versucht zu transponieren, die eine java-Funktion, xsl:function-spec.
Die Funktion, die im Grunde Orte, die html-tags um Teilstrings.
Ich habe jetzt stoßen auf Schwierigkeiten: mit dem java-inline-code-dieser funktioniert perfekt, aber ich bin nicht in der Lage, um herauszufinden, wie um zu verhindern, dass das output escaping bei der Verwendung des xsl:function.
Wie kann ich erreichen den Ausgang enthalten, der wollte html-tags?
Ein Vereinfachtes Beispiel, was ich versuche zu erreichen, ist das folgende:
input-parameter mit dem Wert "AB" sollte dazu führen, dass ein string Ein<b>B</b>, dargestellt im html-browser alsB natürlich.
Beispiel-Funktion habe ich versucht, ist die unten, aber dann ist der resultierende string Ein< ;b> ;B< ;/b> ; (beachten Sie, dass ich hatte, um Leerstellen zu verhindern, dass die Entitäten immer so interpretiert, dieser editor), was natürlich zeigt sich im Browser als<b>B</b>.
Beachten Sie, dass die xsl:element kann nicht verwendet werden, die in der xsl:function code, denn das hat keine Wirkung; ich möchte den string Ergebnis des Funktionsaufrufs enthalten, < und > Zeichen, und dann fügen Sie die Zeichenfolge Ergebnis in das output-Ergebnis-Datei.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:custom="http://localhost:8080/customFunctions">
<xsl:output method="html" version="4.0" encoding="UTF-8" indent="yes"/>
<xsl:function name="custom:test">
<xsl:param name="str"/>
<xsl:value-of select="substring($str,1,1)"/>
<xsl:text disable-output-escaping="yes"><![CDATA[<b>]]></xsl:text>
<xsl:value-of select="substring($str,2)"/>
<xsl:text disable-output-escaping="yes"><![CDATA[</b>]]></xsl:text>
</xsl:function>
<xsl:template match="/">
<xsl:element name="html">
<xsl:element name="body">
<xsl:value-of select="custom:test('AB')"/>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
InformationsquelleAutor Maestro13 | 2012-01-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Beispiel-Sequenz statt Wert-und stellen Sie sicher, dass Ihre Funktion gibt die Knoten (die in der Regel einfach erfolgt schriftlich durch Literale ergebniselemente):
Betrachten Sie zu vermeiden disable-output-escaping hacks, müssen Sie einfach erstellen Sie Knoten und keine strings in der Funktion Körper, und Sie müssen sicherstellen, dass Sie die Ausgabe der Funktion als Ergebnis zurückgegeben (mit
xsl:sequence
) und nicht dessen string-Wert (mitxsl:value-of'
).Macht das jetzt natürlich - es ist viel eleganter zu.
InformationsquelleAutor Martin Honnen