Jak wstawić w XSLT

Jak mogę wstawić

 

W arkuszu stylów XSLT, ciągle dostaję ten błąd:

XML Parsing Error: undefined entity

Zasadniczo chcę mieć niełamliwy znak spacji w szablonie XSLT.

 217
Author: NorthCat, 2009-09-22

12 answers

Użyj zamiast tego kodu encji  .

  jest HTML "znak encji odniesienia". W XML nie ma nazwanego encji dla niełamliwych spacji, 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. Zwrócę również uwagę na Tworzenie spacji ( ) w XSL , która ma doskonałe odpowiedzi.

 346
Author: brabster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-09 11:57:45

  działa naprawdę dobrze. Jednak wyświetli jeden z tych dziwnych znaków w kodowaniu ANSI. Dla mnie zadziałało najlepiej.

<xsl:text> </xsl:text>
 40
Author: Saroj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-04 00:31:14

Można też to zrobić:

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>
 25
Author: WaterSoul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-23 14:48:53

Użyj tego

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

Edit: Downvotery powinny prawdopodobnie potwierdzić, że to działa jako pierwsze (tak jest i jest najbardziej ogólnym rozwiązaniem problemu.)

 20
Author: jagprinderdeep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-14 15:38:35

Możesz dodać definicję tego encji na początku pliku (poniżej deklaracji xml):

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

Możesz również dodać więcej encji, takich jak Ntilde, Aacute, itp.

 15
Author: victor hugo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-22 18:21:39

Oprócz odpowiedzi Victora hugo możliwe jest uzyskanie legalnych odniesień do wszystkich znanych 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>&amp; &nbsp; &ndash;</xsl:text>

Istnieje również pewna różnica w wyniku tego podejścia w porównaniu do <xsl:text disable-output-escaping="yes"> one. Ta ostatnia będzie wytwarzać literały łańcuchowe, takie jak &nbsp; dla wszystkich rodzajów danych wyjściowych, nawet dla <xsl:output method="text">, a to może się różnić od tego, czego byś sobie życzył... Wręcz przeciwnie, uzyskanie encji zdefiniowanych dla szablonu XSLT za pomocą <!DOCTYPE ... <!ENTITY ... będzie zawsze twórz dane wyjściowe zgodne z ustawieniami xsl:output.

I kiedy włączamy wszystkie odwołania do znaków, rozsądne może być użycie lokalnego mechanizmu rozpoznawania encji, aby silnik XSLT nie pobierał definicji encji znaków z Internetu. Użytkownicy JAXP lub jawni Xalan-J mogą potrzebować łatki dla Xalan-J, aby poprawnie używać resolvera. Zobacz mój blog XSLT, entities, Java, Xalan... do pobierania patcha i komentarzy.

 6
Author: Sergey Ushakov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:09

Gdy używasz następujących (Bez disable-output-escaping!) dostaniesz jedną niełamliwą spację:

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

 2
Author: Shaam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-06 11:26:36

Arkusze stylów XSLT muszą być dobrze uformowane XML. Ponieważ "&nbsp;" nie jest jednym z pięciu predefiniowanych encji XML , nie można go bezpośrednio włączyć do arkusza stylów. Więc powrót do rozwiązania {[2] } jest idealnym zamiennikiem "&nbsp;", którego powinieneś użyć.

Przykład:

<xsl:value-of select="$txtFName"/>&#160;<xsl:value-of select="$txtLName"/>
 2
Author: Adil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-01 20:53:03

Możesz również użyć:

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

Pamiętaj o amp po & lub otrzymasz komunikat o błędzie

 0
Author: Mattia Vio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-01 15:36:03

Próbowałem wyświetlić obramowania na pustej komórce w tabeli HTML. Mój stary trik używania non-breaking space w pustych komórkach nie działał z xslt. Użyłem line break z takim samym efektem. Wspominam o tym na wypadek, gdyby powodem, dla którego próbowałeś użyć nietłukącej spacji, było przekazanie zawartości do "pustej" komórki tabeli w celu włączenia granic komórek.

<br/>
 0
Author: B H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-22 12:34:25

Spróbuj użyć

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

Ale to zależy od procesora XSLT, którego używasz: Specyfikacja XSLT nie wymaga procesorów XSLT do konwersji go na " &nbsp;".

 0
Author: Viacheslav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-26 18:03:27

Chociaż odpowiedź została już udzielona przez @brabster i innych.
Myślę, że rozwiązaniem bardziej wielokrotnego użytku byłoby:

<xsl:variable name="space">&#160;</xsl:variable>
...
<xsl:value-of select="$space"/>
 0
Author: Leonid Dashko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-25 07:14:54