У меня есть «разделитель единиц» 0x1F, хранящийся в базе данных.Как написать разделитель единиц в XML 1.0?
Все, что я хотел, это использовать MSXML6.dll для экспорта разделителя единиц в формат XML 1.0.
Вот боли я получил:
записи 0x1F в XML файл непосредственно, сообщение об ошибке, то атрибут в конечном итоге с пустой строкой.
Заменить HTML Entity "& # х 1 F;", а затем записать в файл XML, он оказался: "& т о р, # х 1 F;", которая вызывает разочарование.
Если я вручную изменил XML-файл для замены «& a m p; # x 1 F;" на «& # x 1 F;», синтаксический анализатор XML завершился с ошибкой «Недопустимый символ Юникода».
Вопрос: Так что, если я не могу использовать XML 1.1, что самое лучшее решение, чтобы написать «блок разделитель» в файл XML и ввоз?
Примечание: Одно из возможных решений - заменить «разделитель единиц» на некоторую строку STRANGE, например «$». Но разве это хорошее имя? Каково ваше мнение, если я использую «0x1F» или «# x1F» или «# x1F;» вместо "& # x1F"? Что лучше или лучше?
Резюме:
Давайте сделаем аналогию: Давайте подумаем о том, как работает компилятор, есть две фазы: "Pre-компиляции" и "Compile".
Для создания файла XML он действует как фаза «Скомпилировать». Например. конвертировать "<" в "& l t;"
Однако Unit Separator не поддерживается XML 1.0, поэтому фаза «Compile» не преобразует его в HTML Entity »& # x 1 F;"
Таким образом, мы должны искать решение на этапе «Предварительная компиляция», которое является ответственностью нашего собственного приложения.
При написании:
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, мы должны написать собственный код «Предкомпилировать» для обработки символов Unicode перед подачей фазы «Скомпилировать».
Примечание: Я заимствовал идею «_ x 2 4 1F _» от here. Спасибо за помощь каждого
Нынешний опыт работы с MSXML, но я [изумлен] (http://en.wikipedia.org/wiki/List_of_Unicode_characters). Если char 0x1F и '' или '& # x001F;' не работают, попробуйте '<[CDATA [... char 0x1F ...]]>'. –
Итак, вы предлагаете «"? Я попробую. Спасибо – milesma
Привет Joop. Поскольку разделитель единиц в значении атрибута (появляется в кавычках), он оказался в файле XML, который должен быть «<! [CDATA [& # x1F;]] >« – milesma