У меня есть «разделитель единиц измерения» 0x1F, хранящийся в базе данных.
Все, что я хотел, это использовать MSXML6.dll для экспорта разделителя единиц измерения в формат XML 1.0.
Вот какие у меня боли:
Запись 0x1F напрямую в файл XML, сообщение об ошибке, атрибут закончился пустой строкой.
Заменить на HTML Entity "& # x 1 F;", затем записать в файл XML, получилось: "& a m p ; # x 1 F;", что разочаровывает.
Если я вручную изменю файл XML, чтобы заменить "& am p ; # x 1 F ;" на «& # x 1 F ;», синтаксический анализатор XML завершается ошибкой с исключением «Недопустимый символ Unicode».
Вопрос: Итак, если я не могу использовать XML 1.1, какое лучшее решение для записи "разделителя единиц измерения" в файл XML и импорта?
Примечание. Одним из возможных решений является замена «разделителя единиц измерения» какой-либо СТРАННОЙ строкой, например «$». Но хорошее ли это имя вообще? Каково ваше мнение, если я использую "0x1F" или "#x1F" или "#x1F;" вместо ""? Что лучше или какие-либо лучшие кандидаты?
Обзор:
Давайте проведем аналогию: Давайте подумаем о том, как работает компилятор, есть две фазы: «Предварительная компиляция» и «Компиляция».
Для генерации XML-файла он действует как этап «Компиляция». Например. преобразовать "‹" в "& l t ;"
Однако разделитель модулей не поддерживается XML 1.0, поэтому на этапе «Компиляция» он не будет преобразован в объект HTML «& # x 1 F ;»
Таким образом, мы должны искать решение на этапе "Pre-Compile", за который отвечает наше собственное приложение.
При написании:
Option1: <unit>aaa</unit><unit>bbb</unit>
Option2: simply use "_x241F_" to replace "\37" in the string if "_x241F_" is not conflicting with any existing token in the string.
При чтении:
According to Option1: Load the elements, catenate to a single string with "\37" as separator.
According to Option2: simply use "\37" to replace "_x241F_".
Я также обнаружил, что MSXML (даже самая высокая версия MSXML6.dll) не загружает XML 1.1.
Так что, если мы, к сожалению, используем MSXML, мы должны написать свой собственный код "Pre-Compile" для обработки символов Unicode перед подачей на фазу "Compile".
Примечание. Я позаимствовал идею "_ x 2 4 1F _" из здесь а>. Спасибо всем за помощь

или
не работают, попробуйте<[CDATA[... char 0x1F ...]]>
. - person Joop Eggen   schedule 29.04.2013
кажется самой простой. - person Joop Eggen   schedule 29.04.2013