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-map
gwarancją 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:output
ustawienia.
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-escaping
tego
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"/>