Избегайте шестнадцатеричных символов перед синтаксическим анализом XML

#c# #xml #parsing #hex

#c# #xml #синтаксический анализ #шестнадцатеричный

Вопрос:

Как избежать шестнадцатеричных символов перед синтаксическим анализом XML?

введите описание изображения здесь

Комментарии:

1. Вы пытаетесь загрузить свой xml перед расшифровкой ваших данных, это намеренно?

2. о, хорошо, это хорошая идея, прочитать с помощью FileStream, расшифровать его и проанализировать с помощью xml? вы это имеете в виду?

3. чтобы загрузить файл, попробуйте следующее: XDocument doc2 = XDocument. Загрузка (путь);

4. Я не знаю точного способа, который вы используете для шифрования с помощью CryptoConfing, но я вижу, что он не использовался до загрузки xml. Хотя я предполагаю, что вам сначала нужно расшифровать файл с помощью filestream и using XDocument. Выполните синтаксический анализ, чтобы загрузить его. Это если зашифрованные вещи не записаны в XML-тегах, тогда ошибка заключается в чем-то другом.

Ответ №1:

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

Другими словами, если вы видите это сообщение об ошибке, вы пытаетесь проанализировать что-то как XML, которое не является XML.

Есть несколько причин, которые могут вызвать это:

  1. Ошибка в отправленном XML (это должен был быть XML, но он глючит).
  2. Вы просто выбрали не тот файл.
  3. Вы используете зашифрованный и / или сжатый файл перед расшифровкой и / или распаковкой.
  4. Вы обнаруживаете артефакты передачи, потому что вы читаете поток на неправильном уровне (довольно редко).

Первый случай может быть хуже, потому что он может быть вызван чьей-то ошибкой, и некоторые люди даже не верят, что в XML есть символы, запрещенные за такие вещи, как то, что они на самом деле не являются символами, и не исправят их беспорядок (блин!). Иногда вы можете отфильтровать их мусор, но это всегда чревато.

Тот факт, что вы говорите о расшифровке в другом месте в примере кода, заставляет меня подозревать случай 3: это зашифрованный XML, и вы его еще не расшифровали.

Это может быть смесь того и другого, когда кто-то пытается упаковать необработанные зашифрованные октеты в формат XML. Это невозможно сделать, но скорее, если вам нужно сохранить зашифрованные октеты в формате XML, вы должны перекодировать эти октеты в XML-совместимый формат, такой как base-64 или шестнадцатеричный. Или, альтернативно, просто не используйте XML для этого вообще.