Jak mogę wstawićJak wstawić w XSLT
Do arkusza stylów XSLT, wciąż otrzymuję ten błąd:
XML Parsing Error: undefined entity
Zasadniczo chcę non znak spacji łamanie w szablonie XSLT .
Jak mogę wstawićJak wstawić w XSLT
Do arkusza stylów XSLT, wciąż otrzymuję ten błąd:
XML Parsing Error: undefined entity
Zasadniczo chcę non znak spacji łamanie w szablonie XSLT .
Spróbuj użyć podmiotu  
zamiast tego.
Więcej szczegółów na temat dlaczego
nie działa i innych opcji here.
Świetnie, dokładnie to, czego potrzebowałem ... –
+1 i zawsze istnieje możliwość, by również rozpoznać postać nbsp. –
Natrafiliśmy na sytuację, w której w jednym z wielu XSL przestał działać z tą techniką i zaczął pokazywać dziwną postać. Jednak jeśli użyję techniki CDATA WaterSoul, to działa. –
Użyj tego
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
edit: Downvoters prawdopodobnie powinien potwierdzić, że działa to pierwszy (. To robi, i jest najbardziej ogólne rozwiązanie problemu)
nbsp nie jest wyraźnie zakodowaną przestrzenią. –
Nigdy nie powiedziałem, że to – jagprinderdeep
Martwię się o mój stan psychiczny. Jestem pewien, że skomentowałem odpowiedź, mówiąc coś w stylu "dlaczego nie używać CDATA zamiast jawnie kodować przestrzeń". Nie widzę ani śladu, ale wciąż mam odrobinę pewności siebie. Powiedz mi, czy oszalałeś? –
Możesz chcieć dodać definicję podmiot ten na początku pliku (poniżej deklaracji xML):
<!DOCTYPE stylesheet [
<!ENTITY nbsp " " >
]>
również można dodać kolejne podmioty takie jak Ntilde, aacute itp
Można też to zrobić:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
To zadziała * jeśli procesor obsługuje 'disable-output-escaping' *, które nie jest wymagane i jest przestarzałe w XSLT 2.0 i nowszych wersjach, w wersji 3.0. W tych wersjach można osiągnąć ten sam efekt dzięki 'xsl: character-map' gwarantowanym do pracy z wieloma procesorami. Ponadto umieszcza nazwaną jednostkę ' ' w wynikach, która * nie musi być taka sama jak nierozdzielająca przestrzeń *, a końcowy odbiorca * musi mieć deklarację tej jednostki * (w HTML zwykle jest to niejawnie). – Abel
starałem się wyświetlać granice na pustej komórki w tabeli HTML. Moja stara sztuczka polegająca na używaniu nieprzerwania przestrzeni w pustych komórkach nie działała z xslt. Zastosowałem podział linii z tym samym efektem. Wspominam o tym na wypadek, gdyby powodem, dla którego próbowaliście skorzystać z nierozdzielającej się przestrzeni, było przekazanie treści do "pustej" komórki tabeli w celu włączenia granic komórek.
<br/>
oprócz victor hugo's answer to jest możliwe, aby uzyskać wszystkie znane referencje charakter prawny w pliku XSLT, tak:
<!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>
Jest też pewna różnica w wyniku tego podejścia w porównaniu do <xsl:text disable-output-escaping="yes">
jeden. Ten ostatni będzie produkował ciągi literowe, takie jak
dla wszystkich rodzajów danych wyjściowych, nawet dla <xsl:output method="text">
, a może się to różnić od tego, czego możesz chcieć ... Wręcz przeciwnie, pobieranie obiektów zdefiniowanych dla szablonu XSLT przez <!DOCTYPE ... <!ENTITY ...
zawsze spowoduje wyjście zgodne z ustawieniami xsl:output
.
I przy uwzględnianiu wszystkich odniesień do znaków rozsądne może być użycie lokalnego narzędzia do rozpoznawania nazw, aby silnik XSLT nie pobierał z Internetu definicji jednostek. Użytkownicy JAXP lub jawni użytkownicy Xalan-J mogą potrzebować łatki dla Xalan-J, aby poprawnie używać resolwera. Zobacz mój blog XSLT, entities, Java, Xalan..., aby pobrać poprawki i komentarze.
Pamiętaj, że od niedawna W3 zaczęło blokować zbyt wiele żądań dla tych i podobnych linków, jeśli pochodzi z zautomatyzowanego procesu. Umieść ten plik lokalnie lub na swoim serwerze i odpowiednio dostosuj adres URL, a wszystko powinno być w porządku. Poza tym +1 i doskonałe rozwiązanie do używania nazwanych elementów HTML. – Abel
Dobra wiadomość, a jest jeszcze jeden powód, aby mieć lokalną kopię pliku z definicjami encji, w przeciwnym razie proces XSLT może się nie udać, jeśli połączenie internetowe nie jest dostępne. W świecie Java nie ma potrzeby zhakowania adresów URL, ponieważ możliwe jest zorganizowanie [EntityResolver] (http://docs.oracle.com/javase/8/docs/api/org/xml/sax/EntityResolver. html) i [Apache XML Commons Resolver] (http://xerces.apache.org/xml-commons/components/resolver/) może być dobrym kandydatem. Inne platformy programistyczne również mogą mieć podobne techniki ... –
Tak, więc dla odniesienia, dla dotnetters: [metoda abstrakcyjna ResolveEntity] (https://msdn.microsoft.com/en-us/library/system.xml. xmlreader.resolveentity% 28v = vs.110% 29.aspx) dla encji i [XmlResolver do ładowania zewnętrznych zasobów] (https://msdn.microsoft.com/en-us/library/system.xml.xmldocument.xmlresolver%28v = vs.110% 29.aspx), które są odpowiednikami [.NET dla tych metod Java] (http://stackoverflow.com/questions/942882/does-the-java-uriresolver-concept-exist-in-c- -sharp-and-net). – Abel
Podczas korzystania z następujących dostaniesz jeden non-breaking space (bez disable-output-escaping
!):
<xsl:text> </xsl:text>
Nie potrzebujesz 'disable-output-escaping' dla tego –
 
działa bardzo dobrze. Jednakże wyświetli jeden z tych dziwnych znaków w kodowaniu ANSI. <xsl:text>
pracował dla mnie najlepiej.
<xsl:text> </xsl:text>
Używając zaakceptowanej odpowiedzi, skończyłem z linią podziału w moim wyjściu XML (przynajmniej tak to wyglądało w edytorze XML VS2010). Używając tej odpowiedzi otrzymuję dokładnie 1 miejsce. –
@Matthijs, jest to spacja, a nie niepodzielona przestrzeń, która nie jest taka sama. Jeśli VS pokazuje to niepoprawnie, sprawdź kodowanie (VS potrafi to poprawnie pokazać i kodowanie powinno być niezależne, więc prawdopodobnie robisz coś złego). – Abel
można również użyć:
<xsl:value-of select="'&nbsp'"/>
pamiętać amp po & lub otrzymasz komunikat o błędzie
Spowoduje to wypisanie '& nbsp;' (zakładając, że masz zamiar wstawić średnik), które będzie renderowane jako ' ', a nie jako '' (nb-space). – Abel
XSLT stylów musi być dobrze uformowane XML. Ponieważ " "
nie jest jednym z the five predefined XML entities, nie można go bezpośrednio dołączyć do arkusza stylów. Powracając do swojego rozwiązania, " "
jest idealnym zamiennikiem " "
, którego powinieneś użyć.
Przykład:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>
Można również użyć samo wygląd tutaj http://stackoverflow.com/questions/7511214/what-is-the-difference-between-x00a0-and- 160 – user3766111