сохранение символьных сущностей во время xslt - PullRequest
1 голос
/ 25 октября 2011

Я использовал, например, сущность символа степени ° в моем исходном xml, и она всегда выводилась как ° после перевода и работала нормально.Однако недавно мне пришлось переключиться с ксаланского процессора на саксонский, и теперь этот символ выводится как символ фактической степени (°) в html, и браузер отображает его как ¬∞.

IЯ не совсем уверен, почему это работает в xalan, но я искал вокруг и думал, что карты персонажей будут решением из того, что я нашел на этой странице:

http://www.xmlplease.com/xmltraining/xslt-by-example/examples/character-map_1.html

Но когда я делаюто же самое, что кажется, просто игнорируется, и я все еще вижу ¬∞.

Опять же, я использую saxon9 с задачей xslt в ant с java6.Я хотел бы, чтобы мой символ ° в xml был сохранен (или изменен на °) при переводе в html.Любое предложение?

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

Похоже, что новый вывод не помечен как UTF-8?

Чаще всего, когда один символ становится двумя, это потому, что вы отправляете UTF-8 в браузер, говоря, что это другая кодировка (то есть ISO-8859-1, win-1512 и т. Д.).Размещение кодировки UTF-8 в заголовке HTML может быть недостаточно.Вам, вероятно, также необходимо поместить его в качестве заголовка в ответе HTTP.

Использование ° не должно помочь, если синтаксический анализатор XSLT преобразует все сущности.

В противном случае может существовать флаг, который вы можетеустановить, чтобы избежать перевода сущностей?

2 голосов
/ 25 октября 2011

Вы не можете принудительно сохранить входные объекты, но вы можете убедиться, что любые не-ASCII символы выводятся как ссылки на объекты или символы, используя output encoding = "us-ascii".

Тот факт, что ваш браузер неправильно отображает знак градуса, означает, что документ обслуживается с неверной кодировкой.Использование us-ascii - обходной путь для этого, но он не решает основную проблему, заключающуюся в том, что где-то в вашей конфигурации что-то не так (может быть трудно определить, где).

Я не знаюЗнайте, почему ваши карты персонажей игнорируются.Если вы правильно его кодировали, наиболее вероятной причиной является то, что сериализация выполняется не процессором XSLT, а чем-то другим: например, вы можете преобразовать DOM, а затем сериализовать DOM.

Вы можете получить больше контроля над тем, как Saxon сериализует специальные символы с помощью метода вывода HTML, используя saxon: символьное представление - см. http://saxonica.com/documentation/extensions/output-extras/character-representation.xml

...