2012-02-17 2 views
1

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

По соображениям, которые непрозрачны для меня, но, по-видимому, не подлежат обсуждению, целевая платформа (на основе Java) требует, чтобы выходной документ имел «кодирование =« UTF-8 »в декларации XML, но некоторые специальные символы внутри текстовых узлов должны быть закодированы с их шестнадцатеричным значением unicode - например '' 'Необходимо заменить на «”» и т. Д. Я не смог получить окончательный список символов, которые должны быть закодированы, но это не так просто, как «все не-ASCII».

В настоящее время у меня есть ужасный беспорядок VBScript, использующий ADODB для непосредственного контроля каждой строки выходного файла после обработки и замены символов там, где это необходимо. Это мучительно медленно, и неудивительно, что некоторые персонажи пропущены (и, следовательно, нацелены на целевую платформу).

Хотя я мог тратить время на «очистку» VBScript, долгосрочная цель - полностью избавиться от этого, и я уверен, что должен быть более быстрый и точный способ достижения этого, в идеале в XSLT сам этап.

Может ли кто-нибудь предложить какие-либо плодотворные пути расследования?

(изменить: Я не убежден, что символьные карты являются ответом - я уже смотрел на них раньше, и если я не ошибаюсь, так как мой ввод может содержать любой символ юникода, мне нужно будет иметь карту, содержащую все из них, кроме те, которые я не хочу кодироваться ...)

ответ

0

Ну с XSLT 2.0 вы помеченной свой пост с вы можете использовать карту символов, см http://www.w3.org/TR/xslt20/#character-maps.

+0

Спасибо за ваш ответ. Я не уверен в символьных картах - я смотрел на них (будет редактировать мой пост, чтобы упомянуть об этом) раньше, и если я не ошибаюсь, так как мой ввод может содержать * любой символ юникода, мне нужно будет карта, содержащая все из них * кроме * тех, которые я не хочу кодировать ... –

+0

Верно, что карта символов должна отображать символы, которые вы хотите кодировать, но если у вас сейчас есть VBScript, выполняющий эту задачу, Посмотрите, почему вы не можете настроить карту символов. Или как выглядит ваш текущий алгоритм, чтобы решить, следует ли кодировать или не кодировать символ? –

+0

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

3
<xsl:output encoding="us-ascii"/> 

Сообщает, что сериализатор должен изготовить ASCII-совместимый выход. Это должно заставить его создавать ссылки на символы для всех символов, отличных от ASCII, в текстовом содержимом и значениях атрибутов. (Если в других местах, таких как имена тегов или атрибутов, есть не-ASCII, произойдет смена сериализации.)

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