Jak mogę wstawić
W arkuszu stylów XSLT ciągle pojawia się ten błąd:
Błąd analizy XML: niezdefiniowana jednostka
Zasadniczo chcę, aby w szablonie XSLT nie występowała spacja.
Jak mogę wstawić
W arkuszu stylów XSLT ciągle pojawia się ten błąd:
Błąd analizy XML: niezdefiniowana jednostka
Zasadniczo chcę, aby w szablonie XSLT nie występowała spacja.
Odpowiedzi:
 Zamiast tego użyj kodu encji .
to HTML „odwołanie do znaku”. Nie ma nazwanego elementu dla nierozdzielającego miejsca w XML, więc używasz kodu  .
Wikipedia zawiera listę encji XML i HTML , i widać, że w XML jest tylko 5 „predefiniowanych encji”, ale HTML ma ponad 200. Wskażę też na Tworzenie spacji (& nbsp;) w XSL, która ma doskonałe odpowiedzi.
ŠZamiast  tego drugiego, które zawsze będzie rozwiązywać do spacji niezniszczającej Unicode.
 działa naprawdę dobrze. Wyświetli jednak jeden z tych dziwnych znaków w kodowaniu ANSI. <xsl:text>działało najlepiej dla mnie.
<xsl:text> </xsl:text>
Można to również zrobić:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
disable-output-escaping , co nie jest wymagane i zostało przestarzałe w XSLT 2.0 i więcej w 3.0. W tych wersjach możesz osiągnąć ten sam efekt z xsl:character-mapgwarancją pracy między procesorami. Ponadto umieszcza nazwany byt na wyjściu, który niekoniecznie jest taki sam jak spacja niełamiąca, a odbiorca musi mieć zadeklarowany byt (w HTML jest to zwykle niejawnie).
Użyj tego
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
edit: Downvoters powinni prawdopodobnie sprawdzić, czy to działa najpierw (działa i jest najbardziej ogólnym rozwiązaniem problemu).
Możesz dodać definicję tego obiektu na początku pliku (poniżej deklaracji xml):
<!DOCTYPE stylesheet [
<!ENTITY nbsp " " >
]>
Możesz także dodać więcej podmiotów, takich jak Ntilde, Aacute itp.
Oprócz odpowiedzi Victora Hugo możliwe jest uzyskanie legalności wszystkich znanych odniesień do znaków w pliku XSLT, takich jak:
<!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>
Istnieje również pewna różnica w wyniku tego podejścia w porównaniu do <xsl:text disable-output-escaping="yes">jednego. Ta ostatnia stworzy literały łańcuchowe jak dla wszystkich rodzajów danych wyjściowych, nawet dla <xsl:output method="text">, i może się to różnić od tego, czego możesz sobie życzyć ... Przeciwnie, uzyskanie encji zdefiniowanych dla szablonu XSLT za pomocą <!DOCTYPE ... <!ENTITY ...zawsze będzie generować dane wyjściowe zgodne z twoje xsl:outputustawienia.
A w przypadku dołączania wszystkich odniesień do znaków rozsądne może być użycie lokalnego resolvera encji, aby silnik XSLT nie pobierał definicji encji znakowych z Internetu. Użytkownicy JAXP lub jawni użytkownicy Xalan-J mogą potrzebować łatki dla Xalan-J, aby poprawnie korzystać z resolvera. Zobacz mój blog XSLT, podmioty, Java, Xalan ... w celu pobrania łatek i komentarzy.
Gdy użyjesz (bez disable-output-escaping!) Następujących elementów , otrzymasz jedno nierozdzielające miejsce:
<xsl:text> </xsl:text>
disable-output-escapingtego
Arkusze stylów XSLT muszą być poprawnie sformatowanymi plikami XML. Ponieważ " "nie jest jednym z pięciu predefiniowanych elementów XML , nie można go bezpośrednio uwzględnić w arkuszu stylów. Tak więc powrót do rozwiązania " "jest idealnym zamiennikiem, " "którego powinieneś użyć.
Przykład:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>
możesz także użyć:
<xsl:value-of select="'&nbsp'"/>
zapamiętaj wzmacniacz po & lub otrzymasz komunikat o błędzie
&nbsp;(zakładając, że masz tam być średnik), który będzie renderowany jako , a nie jako `` (nb-space).
Próbowałem wyświetlić ramki na pustej komórce w tabeli HTML. Moja stara sztuczka polegająca na używaniu niezniszczalnego miejsca w pustych komórkach nie działała z xslt. Użyłem podziału linii z tym samym efektem. Wspominam o tym na wszelki wypadek, dla którego próbujesz użyć nieprzerwanej przestrzeni, aby podać trochę zawartości „pustej” komórce tabeli w celu włączenia granic komórki.
<br/>
Spróbuj użyć
<xsl:text> </xsl:text>
Ale zależy to od używanego procesora XSLT: specyfikacja XSLT nie wymaga procesorów XSLT do konwersji na „ ”.
Chociaż odpowiedź została już udzielona przez @brabster i innych.
Myślę, że rozwiązaniem wielokrotnego użytku byłoby:
<xsl:variable name="space"> </xsl:variable>
...
<xsl:value-of select="$space"/>