Frage

Was ist der beste Weg, eine HTML-Entität in XSLT einzubinden?

<xsl:template match="/a/node">
    <xsl:value-of select="."/>
    <xsl:text>&nbsp;</xsl:text>
</xsl:template>

dieser gibt a zurück XsltParseError

War es hilfreich?

Lösung

Sie können den CDATA-Abschnitt verwenden

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>

oder Sie können &nbsp in der lokalen DTD beschreiben:

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>

oder einfach nutzen &#160; anstatt &nbsp;

Andere Tipps

Es ist auch möglich, den Ansatz ab dem 2. Teil zu erweitern Akus Antwort und holen Sie sich alle bekannten Charakterreferenzen wie folgt:

<!DOCTYPE stylesheet [
  <!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
      "http://www.w3.org/2003/entities/2007/w3centities-f.ent">
  %w3centities-f;
]>
...
<xsl:text>&nbsp;&minus;30&deg;</xsl:text>

Es gibt gewisse Unterschiede im Ergebnis im Vergleich zu <xsl:text disable-output-escaping="yes"> Ansatz.Letzteres wird String-Literale wie erzeugen &nbsp; für alle Arten von Ausgaben, auch für <xsl:output method="text">, und dies kann anders sein, als Sie es sich wünschen ...Im Gegenteil, das Abrufen von für die XSLT-Vorlage definierten Entitäten über <!DOCTYPE ... <!ENTITY ... wird immer eine Ausgabe erzeugen, die mit Ihrer übereinstimmt xsl:output Einstellungen.

Dann kann es sinnvoll sein, einen lokalen Entity-Resolver zu verwenden, um zu verhindern, dass die XSLT-Engine Zeichen-Entity-Definitionen aus dem Internet abruft.JAXP- oder explizite Xalan-J-Benutzer benötigen möglicherweise einen Patch für Xalan-J, um den Resolver korrekt zu verwenden.Siehe meinen Blog XSLT, Entitäten, Java, Xalan... für Patch-Downloads und Kommentare.

Eine weitere Möglichkeit, HTML-Entitäten innerhalb von XSLT zu verwenden, ist die folgende:

<xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>

XSLT verarbeitet standardmäßig nur die fünf Grundentitäten: lt, gt, apos, quot, Und amp.Alle anderen müssen als definiert werden @Aku Erwähnungen.

dieser gibt a zurück XsltParseError

Ja, und der Grund dafür ist dieser &nbsp; ist in XML oder XSLT keine vordefinierte Entität wie in HTML.

Sie könnten einfach das Unicode-Zeichen verwenden, das &nbsp; steht für: &#160;

Da es nun Unicode gibt, ist es im Allgemeinen kontraproduktiv, benannte Zeichenentitäten zu verwenden.Aus diesem Grund würde ich empfehlen, das Unicode-Zeichen für ein geschütztes Leerzeichen anstelle einer Entität zu verwenden.Alternativ können Sie die Entität verwenden &#160;, anstelle der benannten Entität.Durch die Verwendung benannter Entitäten ist Ihr XML von einer Inline- oder externen DTD abhängig.

Ich habe festgestellt, dass alle diese Lösungen ein Â-Zeichen im Leerzeichen erzeugten.

Benutzen <xsl:text> </xsl:text> hat das Problem für mich gelöst;Aber <xsl:text>#x20;</xsl:text> könnte auch funktionieren.

Danke für Ihre Information.Ich habe einen kurzen Blog-Beitrag geschrieben, der auf dem basiert, was für mich funktioniert hat, als ich die XSLT-Transformation in einer Vorlage von durchgeführt habe Dynamicweb CMS.

Der Blogbeitrag ist hier: So fügen Sie Entitäten zu XSLT-Vorlagen hinzu.

/Sten Hougaard

Es ist notwendig, die Entität zu verwenden #x160;

Mit dem DOCTYPE-Ansatz von Aku hatte ich kein Glück.

Was bei mir bei MSXML-Transformationen auf einem Windows 2003-Server funktioniert hat, war

    <xsl:text disable-output-escaping="yes">&amp;#160;</xsl:text>

Eine Art Hybrid aus dem oben Gesagten.Vielen Dank an die Stackoverflow-Mitwirkenden!

Ein Leerzeichen zwischen Text-Tags sollte ausreichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top