2013-10-01 2 views
3

У меня есть следующий XML:сохранить характер шестнадцатеричных кодов во время XSLT 2.0 преобразования

<root> 
    <child value="&#xFF;&#xEF;&#x99;&#xE0;"/> 
</root> 

Когда я преобразование Я хочу, чтобы значение символов шестнадцатеричного кода будет сохранено. Так что, если мое преобразование было просто простым xsl:copy, и вход был выше XML, тогда выход должен быть идентичным входу.

Я читал о функции saxon:character-representation, но сейчас я использую Saxon-HE 9.4, поэтому функция недоступна для меня, и я даже не уверен, что она сделает то, что я хочу.

Я также читал о use-character-maps. Это, похоже, решает мою проблему, но я бы предпочел не добавлять гигантскую карту к моему преобразованию, чтобы поймать все возможные шестнадцатеричные коды символов.

<xsl:character-map name="characterMap"> 
    <xsl:output-character character="&#xA0;" string="&amp;#xA0;"/> 
    <xsl:output-character character="&#xA1;" string="&amp;#xA1;"/> 
    <!-- 93 more entries... &#xA1; through &#xFE; --> 
    <xsl:output-character character="&#xFF;" string="&amp;#xFF;"/> 
</xsl:character-map> 

Есть ли другие способы сохранения шестнадцатеричных кодов символов?

+0

Относится к/является дубликатом http://stackoverflow.com/questions/5985615/preserving-entity-references-when-transforming-xml-with-xslt –

ответ

1

Процессор XSLT не знает, как символ был представлен во входном файле - все это обрабатывается синтаксическим анализатором XML. Поэтому он не может воспроизвести оригинал.

Если вы хотите вывести все символы, отличные от ASCII, с помощью цифровых символов, независимо от того, как они были представлены во входном файле, попробуйте использовать xsl: output encoding = "us-ascii".

Если вам действительно нужно сохранить исходное представление - и я не вижу никакой оправданной причины, почему кто-то должен это сделать, - тогда попробуйте использовать lexev Andrew Welch, который преобразует все ссылки на сущности и символы на инструкции обработки на путь в и обратно к ссылкам на объекты/символы на выходе.

+0

Причина, по которой мне требуется оригинальное представление, имеет разные цели и потому что рассматриваемый XML используется как конфигурация встроенной системы, которая понимает hex и немного другое. Однако я дам 'encoding =" us-ascii "попытку. – ubiquibacon

+0

Для различения XML вы должны преобразовать оба документа в каноническую форму (или проанализировать их и сравнить деревья), а не пытаться воспроизвести лексическое представление одного документа в другом. В противном случае вы столкнетесь с множеством тривиальных различий, таких как порядок объявлений атрибутов и имен пространства имен. –

+0

И если ваша «встроенная система» читает XML без использования правильного синтаксического анализа XML, я могу только посочувствовать. –

 Смежные вопросы

  • Нет связанных вопросов^_^