Wie kann ich einfügen
In einem XSLT-Stylesheet wird immer wieder der folgende Fehler angezeigt:
XML-Analysefehler: undefinierte Entität
Im Wesentlichen möchte ich ein nicht unterbrechendes Leerzeichen in der XSLT-Vorlage.
Wie kann ich einfügen
In einem XSLT-Stylesheet wird immer wieder der folgende Fehler angezeigt:
XML-Analysefehler: undefinierte Entität
Im Wesentlichen möchte ich ein nicht unterbrechendes Leerzeichen in der XSLT-Vorlage.
Antworten:
Verwenden Sie  
stattdessen den Entitätscode .
ist eine HTML "Zeichenentitätsreferenz". Es gibt keine benannte Entität für nicht unterbrechenden Speicherplatz in XML, daher verwenden Sie den Code  
.
Wikipedia enthält eine Liste von XML und HTML - Entitäten , und Sie können sehen , dass es nur 5 „vordefinierte Entitäten“ in XML, HTML , aber über 200 hat werde ich darauf über auch einen Raum zu schaffen (& nbsp;) in XSL , das hat ausgezeichnete Antworten.
Š
anstelle  
der letzteren, die immer in einen Unicode-Leerzeichen ohne Unterbrechung aufgelöst wird.
 
funktioniert wirklich gut. Es wird jedoch eines dieser seltsamen Zeichen in der ANSI-Codierung angezeigt. <xsl:text>
hat am besten für mich funktioniert.
<xsl:text> </xsl:text>
Man kann das auch machen:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
disable-output-escaping
, was nicht erforderlich ist und in XSLT 2.0 und mehr noch in 3.0 veraltet war. In diesen Versionen können Sie den gleichen Effekt erzielen, wenn Sie xsl:character-map
garantiert prozessorübergreifend arbeiten. Außerdem wird dadurch eine benannte Entität
in die Ausgabe eingefügt, die nicht unbedingt mit einem nicht unterbrechenden Leerzeichen identisch ist, und auf der Empfangsseite muss diese Entität deklariert sein (in HTML ist dies normalerweise implizit).
Benutze das
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
edit: Downvoters sollten wahrscheinlich überprüfen, ob dies zuerst funktioniert (es funktioniert und ist die allgemeinste Lösung für das Problem.)
Möglicherweise möchten Sie die Definition für diese Entität am Anfang der Datei hinzufügen (unter der XML-Deklaration):
<!DOCTYPE stylesheet [
<!ENTITY nbsp " " >
]>
Sie können auch weitere Entitäten wie Ntilde, Aacute usw. hinzufügen.
Zusätzlich zur Antwort von Victor Hugo ist es möglich, alle bekannten Zeichenreferenzen in einer XSLT-Datei wie folgt legal zu machen:
<!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>& –</xsl:text>
Es gibt auch einen gewissen Unterschied im Ergebnis dieses Ansatzes im Vergleich zu <xsl:text disable-output-escaping="yes">
einem. Letzteres wird String-Literale erzeugen, wie
für alle Arten von Ausgaben, auch für <xsl:output method="text">
, und dies kann sich von dem unterscheiden, was Sie vielleicht wünschen ... Im Gegenteil, wenn Entitäten für XSLT-Vorlagen über definiert werden, <!DOCTYPE ... <!ENTITY ...
wird immer eine Ausgabe erzeugt, die mit übereinstimmt Ihrexsl:output
Einstellungen.
Wenn alle Zeichenreferenzen eingeschlossen sind, 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 für Xalan-J, um den Resolver korrekt zu verwenden. In meinem Blog XSLT, Entities, Java, Xalan ... finden Sie Patch-Download und Kommentare.
Wenn Sie Folgendes verwenden (ohne disable-output-escaping
!), Erhalten Sie ein einzelnes Leerzeichen ohne Unterbrechung:
<xsl:text> </xsl:text>
disable-output-escaping
für diese
XSLT- Stylesheets müssen aus wohlgeformtem XML bestehen. Da " "
es sich nicht um eine der fünf vordefinierten XML-Entitäten handelt , kann es nicht direkt in das Stylesheet aufgenommen werden. Die Rückkehr zu Ihrer Lösung " "
ist also ein perfekter Ersatz, den " "
Sie verwenden sollten.
Beispiel:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>
Sie können auch verwenden:
<xsl:value-of select="'&nbsp'"/>
Denken Sie an den Verstärker nach dem & oder Sie erhalten eine Fehlermeldung
&nbsp;
(vorausgesetzt, Sie wollten ein Semikolon verwenden), das als
und nicht als `` (nb-Leerzeichen) gerendert wird.
Ich habe versucht, Rahmen für eine leere Zelle in einer HTML-Tabelle anzuzeigen. Mein alter Trick, nicht unterbrechenden 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 versucht haben, den nicht unterbrechenden Bereich zu verwenden, darin bestand, einer "leeren" Tabellenzelle Inhalt zu geben, um die Zellränder zu aktivieren.
<br/>
Versuchen zu benutzen
<xsl:text> </xsl:text>
Dies hängt jedoch vom verwendeten XSLT-Prozessor ab: Für die XSLT-Spezifikation müssen keine XSLT-Prozessoren in "
" konvertiert werden .
Obwohl die Antwort bereits von @brabster und anderen gegeben wurde.
Ich denke, eine wiederverwendbarere Lösung wäre:
<xsl:variable name="space"> </xsl:variable>
...
<xsl:value-of select="$space"/>