Вставить изображения в файл XML - PullRequest
16 голосов
/ 14 апреля 2009

Я хотел бы вставить изображения в элемент XML-файла, каков наилучший способ сделать это? Не могли бы вы предложить какой-нибудь хороший способ включить изображения в XML-файл?

Ответы [ 5 ]

21 голосов
/ 14 апреля 2009

Наиболее распространенный способ сделать это - включить двоичный элемент как base-64 в элемент. Однако это обходной путь, который добавляет в файл немного объема.

Например, это байты от 00 до 09 (обратите внимание, что нам нужно 16 байтов для кодирования данных размером 10 байт):

<xml><image>AAECAwQFBgcICQ==</image></xml>

как эта кодировка зависит от архитектуры. Например, в .NET вы можете использовать Convert.ToBase64String или XmlWriter.WriteBase64.

4 голосов
/ 14 апреля 2009

Я всегда преобразовываю байтовые данные в кодировку Base64, а затем вставляю изображение.

Это также способ, которым Word делает это для файлов XML (не то, что Word является хорошим примером работы с XML: P).

4 голосов
/ 14 апреля 2009

XML - это не формат для хранения изображений и двоичных данных. Я думаю, что все зависит от того, как вы хотите использовать эти изображения. Если вы находитесь в веб-приложении и хотели бы прочитать их оттуда и отобразить их, я бы сохранил URL-адреса. Если вам нужно отправить их в другую конечную точку сети, я бы их сериализовал, а не сохранял вручную в XML Пожалуйста, объясните, каков сценарий.

4 голосов
/ 14 апреля 2009

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

Однако вы можете преобразовать его в Base64 или аналогичный и встроить в XML.

В таких случаях обработка пробелов в XML может еще более усложнить ситуацию.

2 голосов
/ 14 апреля 2009

Вот некоторый код, взятый из Kirk Evans Blog , который демонстрирует, как кодировать изображение в C #;

//Load the picture from a file
Image picture = Image.FromFile(@"c:\temp\test.gif");

//Create an in-memory stream to hold the picture's bytes
System.IO.MemoryStream pictureAsStream = new System.IO.MemoryStream();
picture.Save(pictureAsStream, System.Drawing.Imaging.ImageFormat.Gif);

//Rewind the stream back to the beginning
pictureAsStream.Position = 0;
//Get the stream as an array of bytes
byte[] pictureAsBytes = pictureAsStream.ToArray();

//Create an XmlTextWriter to write the XML somewhere... here, I just chose
//to stream out to the Console output stream
System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(Console.Out);

//Write the root element of the XML document and the base64 encoded data
writer.WriteStartElement("w", "binData",
                         "http://schemas.microsoft.com/office/word/2003/wordml");

writer.WriteBase64(pictureAsBytes, 0, pictureAsBytes.Length);

writer.WriteEndElement();
writer.Flush();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...