webentwicklung-frage-antwort-db.com.de

Wie füge ich ein & nbsp; in XSLT

Wie kann ich einfügen?

 

In einem XSLT-Stylesheet erhalte ich diese Fehlermeldung ständig:

XML-Parsing-Fehler: undefinierte Entität

Im Wesentlichen möchte ich ein ununterbrochenes Leerzeichen in der XSLT-Vorlage.

192
JL.

Verwenden Sie stattdessen den Entitätscode  .

  ist eine HTML-Zeichenentitätsreferenz. Es gibt keine benannte Entität für geschützte Leerzeichen in XML, daher verwenden Sie den Code  .

Wikipedia enthält eine Liste von XML- und HTML-Entitäten , und Sie sehen, dass es in XML nur 5 "vordefinierte Entitäten" gibt, HTML jedoch über 200. Ich verweise auch auf Ein Leerzeichen erstellen (& nbsp.) ;) in XSL das hat ausgezeichnete Antworten.

317
brabster

&#160; funktioniert wirklich gut. Es wird jedoch eines dieser merkwürdigen Zeichen in ANSI-Codierung angezeigt. <xsl:text> hat für mich am besten funktioniert.

<xsl:text> </xsl:text>
30
Saroj

Man kann das auch tun: 

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

Benutze das

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

edit: Downvoter sollten wahrscheinlich bestätigen, dass dies zuerst funktioniert (dies ist die allgemeinste Lösung für das Problem.)

20
jagprinderdeep

Sie können die Definition für diese Entität am Anfang der Datei hinzufügen (unterhalb der XML-Deklaration):

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

Sie können auch weitere Objekte wie Ntilde, Aacute usw. hinzufügen.

12
victor hugo

Neben der Antwort von victor hugo ist es möglich, alle bekannten Zeichenreferenzen in einer XSLT-Datei wie folgt zu erhalten:

<!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>&amp; &nbsp; &ndash;</xsl:text>

Es gibt auch einen gewissen Unterschied im Ergebnis dieses Ansatzes im Vergleich zu <xsl:text disable-output-escaping="yes">. Letzteres wird Stringliterale wie &nbsp; für alle Arten von Ausgaben erzeugen, selbst für <xsl:output method="text">, und dies kann sich von dem unterscheiden, was Sie sich vielleicht wünschen ... Im Gegenteil, das Erhalten von Entitäten, die für die XSLT-Vorlage über <!DOCTYPE ... <!ENTITY ... definiert wurden, führt immer dazu Ausgabe in Übereinstimmung mit Ihren xsl:output-Einstellungen.

Wenn Sie alle Zeichenreferenzen einschließen, kann es sinnvoll sein, einen lokalen Entitätsauflöser zu verwenden, um zu verhindern, dass die XSLT-Engine Zeichenentitätsdefinitionen aus dem Internet abruft. JAXP- oder explizite Xalan-J-Benutzer benötigen möglicherweise einen Patch, damit Xalan-J den Resolver ordnungsgemäß verwenden kann. Siehe mein Blog XSLT, Entities, Java, Xalan ... für Patch-Download und Kommentare.

5
Sergey Ushakov

XSLT Stylesheets müssen wohlgeformtes XML sein. Da "&nbsp;" keine der der fünf vordefinierten XML-Entitäten ist, kann es nicht direkt in das Stylesheet aufgenommen werden Wenn Sie zu Ihrer Lösung zurückkehren, ist "&#160;" ein perfekter Ersatz für "&nbsp;", den Sie verwenden sollten.

Beispiel: 

<xsl:value-of select="$txtFName"/>&#160;<xsl:value-of select="$txtLName"/>
2
Adil

Wenn Sie Folgendes verwenden (ohne disable-output-escaping!), Erhalten Sie ein einziges, fehlerfreies Leerzeichen:

<xsl:text>&#160;</xsl:text>

2
Shaam

sie können auch verwenden:

<xsl:value-of select="'&amp;nbsp'"/>

erinnern Sie sich an den Amp nach dem &, oder Sie erhalten eine Fehlermeldung

0
Mattia Vio

Ich habe versucht, Rahmen für eine leere Zelle in einer HTML-Tabelle anzuzeigen. Mein alter Trick, nicht umbrechenden Speicherplatz in leeren Zellen zu verwenden, funktionierte nicht mit xslt. Ich habe Zeilenumbruch mit dem gleichen Effekt verwendet. Ich erwähne dies nur für den Fall, dass der Grund, warum Sie versuchten, den geschützten Speicherplatz zu verwenden, darin bestand, einer "leeren" Tabellenzelle Inhalt zuzuweisen, um die Zellenränder einzuschalten.

<br/>
0
B H

Versuchen zu benutzen 

<xsl:text>&#160;</xsl:text>

Dies hängt jedoch vom verwendeten XSLT-Prozessor ab: Für die XSLT-Spezifikation sind keine XSLT-Prozessoren erforderlich, um sie in "&nbsp;" zu konvertieren. 

0
Viacheslav