Я использую XSL для преобразования XML UTF-8 в открытый текст, и он предназначен только для систем ASCII. Мейнфрейм, среди прочего. Есть целый набор символов, которые потенциально могут быть в XML, что задушит нижестоящие системы. Целью существования этого XSL является обслуживание этих нижестоящих систем, поэтому я обязан предоставить им пригодные для использования файлы.
У меня есть МНОГО разных XSL, которые делают это.
Я исправил некоторые из критических XSL, чтобы использовать translate() для замены некоторых определенных символов, которые, как я знал, встречались и вызывали трудности, но только в качестве временной меры. Я не могу позволить себе сделать это для каждого символа в расширенном наборе, для каждого поля в каждом XSL, который я запускаю.
У меня нет никакого контроля над кодировкой или набором символов XML. Есть ли способ, которым я могу просто программно заставить XSL использовать только символы ASCII в создаваемом им текстовом файле? Какая-то спецификация в объявлении вывода?
РЕДАКТИРОВАТЬ: Чтобы быть более точным, важно, чтобы я не удалял никаких символов. Как и сейчас, с translate() мне нужно заменить символы, отличные от ASCII, на удобочитаемые альтернативы. В идеале существует способ указать XSL использовать какой-либо стандартизированный метод для замены не-ASCII-символов на ASCII-символы.
Во-вторых, я не могу выбросить никаких ошибок. Я не имею никакого контроля над отправляющей системой, поэтому, если есть какие-либо ошибки, я не могу сказать: "Эй, эта запись не удалась, пожалуйста, отправьте ее еще раз, используя только символы ASCII".
В-третьих, у меня есть некоторый контроль над процессом, поэтому я мог бы добавить дополнительный XSL, который просто переводит символы перед их передачей. Это неплохая идея, потому что мне нужно будет поддерживать только одно дополнительное преобразование. Однако мне нужно поддерживать почти 100 преобразований, поэтому мне придется изменить почти все их конвейеры. На самом деле это может быть хорошей альтернативой, если в XSL нет простого способа.
Идея <xsl:output encoding="US-ASCII"/> звучит как то, что мне нужно, но мне придется поэкспериментировать и посмотреть, как выглядят отсылки к персонажам на другом конце. Это может быть хорошим вариантом.