xslt кодирование специальных символов - PullRequest
1 голос
/ 29 марта 2011

Я использую Java с Xalan 2.7 для преобразования одного XML в другой.

Источник StreamSource(UTF-8 Reader); Результат StreamResult(ByteArrayOutputStream)

Теперь мой шаблонустановите для использования UTF-8 (обратите внимание на версию 1.0):

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" 
            indent="yes" 
            omit-xml-declaration="yes"  
            encoding="UTF-8"/>

Теперь я хочу, чтобы в выводе были закодированы все специальные символы.Что-то вроде 2.0 карты символов, так что € = &#euro; или эквивалент в шестнадцатеричном формате.

Как это сделать с наименьшими усилиями?

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

Я предполагаю, что под "специальными" символами вы подразумеваете что-либо вне диапазона ASCII.

Если вы не хотите, чтобы эти символы были в полученном XML, вам не нужно указывать UTF-8 в качестве кодировки, поскольку в вашем контенте не будет символов, отличных от ASCII.

Вы можете просто указать ASCII в качестве выходной кодировки в таблице стилей XSLT длязаставить процессор XSLT выводить числовые ссылки на символы для всех символов, не относящихся к ASCII.

И процессор JDK 6 по умолчанию, и Xalan 2.7 поддерживают это.

0 голосов
/ 29 марта 2011

У меня когда-то было подобное требование, потому что мне нужно было обрабатывать непечатаемые символы через XSLT. Я придумал использовать FilterInputStream / FilterOutputStream, который использовал небольшие конечные автоматы для маршалинга и демаршалирования таких обозначений. Надеюсь, что это дает вам некоторые идеи :-)

...