我想在XML文件的元素中插入图片,最好的方法是什么?您能否建议一些将图片包含在XML文件中的好方法?
最常见的方法是将二进制文件作为base-64包含在元素中。但是,这只是一种解决方法,会增加文件大小。
例如,以下是字节00至09(请注意,我们需要16个字节来编码10个字节的数据):
<xml><image>AAECAwQFBgcICQ==</image></xml>
如何进行编码会因架构而异。例如,在.NET中,您可以使用Convert.ToBase64String
或XmlWriter.WriteBase64
。
因为XML是一种文本格式,而图片通常不是(除了一些古老和过时的格式),因此没有真正明智的方法来处理它。查看类似ODT或OOXML的东西也会发现它们不会直接将图像嵌入XML。
但是,您可以将其转换为Base64或类似格式,并将其嵌入到XML中。
在这种情况下,XML的空格处理可能会进一步复杂化事情。
XML不是用于存储图像或二进制数据的格式。我认为这取决于您如何使用这些图像。如果您在Web应用程序中并且想要从那里读取和显示它们,我会存储URL。如果您需要将它们发送到另一个Web端点,则应序列化它们,而不是手动持久化在XML中。请解释一下具体情况。
这里是从Kirk Evans博客中提取的一些代码,演示了如何在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();