Я получаю несколько xml-файлов со встроенными изображениями в кодировке base64, которые мне нужно декодировать и сохранить в виде файлов.
Немодифицированный (кроме заархивированного) пример такого файла можно скачать ниже:
20091123-125320.zip (60 КБ)
Однако я получаю такие ошибки, как недопустимая длина для массива символов Base-64 и недопустимый символ в строке Base-64. Я отметил строку в коде, где я получаю ошибку в коде.
Файл может выглядеть так:
<?xml version="1.0" encoding="windows-1252"?>
<mediafiles>
<media media-type="image">
<media-reference mime-type="image/jpeg"/>
<media-object encoding="base64"><![CDATA[/9j/4AAQ[...snip...]P4Vm9zOR//Z=]]></media-object>
<media.caption>What up</media.caption>
</media>
</mediafiles>
И код для обработки такой:
var xd = new XmlDocument();
xd.Load(filename);
var nodes = xd.GetElementsByTagName("media");
foreach (XmlNode node in nodes)
{
var mediaObjectNode = node.SelectSingleNode("media-object");
//The line below is where the errors occur
byte[] imageBytes = Convert.FromBase64String(mediaObjectNode.InnerText);
//Do stuff with the bytearray to save the image
}
XML-данные взяты из корпоративной газетной системы, поэтому я почти уверен, что файлы в порядке - и должно быть что-то в том, как я их обрабатываю, это просто неправильно. Может проблема с кодировкой?
Я попытался записать содержимое mediaObjectNode.InnerText, и это данные, закодированные в base64, поэтому навигация по xml-doc не является проблемой.
Я гуглил, гуглил, переполнял стек и плакал - и не нашел решения... Помогите!
Редактировать:
Добавлен фактический файл примера (и награда). Обратите внимание, что загружаемый файл имеет немного другую схему, так как я упростил его в приведенном выше примере, удалив ненужные вещи...