将图片插入到XML文件中

17

我想在XML文件的元素中插入图片,最好的方法是什么?您能否建议一些将图片包含在XML文件中的好方法?

5个回答

21

最常见的方法是将二进制文件作为base-64包含在元素中。但是,这只是一种解决方法,会增加文件大小。

例如,以下是字节00至09(请注意,我们需要16个字节来编码10个字节的数据):

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

如何进行编码会因架构而异。例如,在.NET中,您可以使用Convert.ToBase64StringXmlWriter.WriteBase64


5

因为XML是一种文本格式,而图片通常不是(除了一些古老和过时的格式),因此没有真正明智的方法来处理它。查看类似ODT或OOXML的东西也会发现它们不会直接将图像嵌入XML。

但是,您可以将其转换为Base64或类似格式,并将其嵌入到XML中。

在这种情况下,XML的空格处理可能会进一步复杂化事情。


我在谈论的是当你“另存为'XML'”时可以获得的Word XML文件。 - Wim Haanstra
我承认错误。然而,我从未见过有人使用过那个(更不用说在野外见过这样的文件了)。 - Joey

5

XML不是用于存储图像或二进制数据的格式。我认为这取决于您如何使用这些图像。如果您在Web应用程序中并且想要从那里读取和显示它们,我会存储URL。如果您需要将它们发送到另一个Web端点,则应序列化它们,而不是手动持久化在XML中。请解释一下具体情况。


5
我通常会将字节数据转换为Base64编码,然后插入图片。
这也是Word用于其XML文件的方式(不过Word并不是如何处理XML的好例子 :P)。

2

这里是从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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接