2009-04-14 60 views
15

Tôi muốn chèn hình ảnh trong một phần tử tệp XML, cách tốt nhất để làm điều này là gì? Bạn vui lòng đề xuất một số cách hay để đưa hình ảnh vào tệp xml?Chèn hình ảnh vào tệp XML

Trả lời

19

Cách phổ biến nhất để thực hiện việc này là bao gồm nhị phân làm cơ số 64 trong phần tử. Tuy nhiên, đây là giải pháp thay thế và thêm một chút khối lượng vào tệp.

Ví dụ, đây là byte 00-09 (lưu ý chúng tôi cần 16 byte để mã hóa 10 byte giá trị của dữ liệu):

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

cách bạn làm mã hóa này khác nhau tùy theo kiến ​​trúc. Ví dụ: với .NET, bạn có thể sử dụng Convert.ToBase64String hoặc XmlWriter.WriteBase64.

4

Vì XML là định dạng văn bản và hình ảnh thường không (ngoại trừ một số định dạng cổ và cổ) không có cách nào thực sự hợp lý để làm điều đó. Nhìn vào những thứ như ODT hoặc OOXML cũng cho bạn thấy rằng chúng không nhúng hình ảnh trực tiếp vào XML.

Tuy nhiên, bạn có thể chuyển đổi nó thành Base64 hoặc tương tự và nhúng nó vào XML.

Việc xử lý khoảng trắng của XML có thể làm phức tạp thêm nhiều thứ trong các trường hợp như vậy.

+0

Tôi đang nói về các tệp XML Word bạn có thể nhận được khi bạn "Lưu dưới dạng" XML "". –

+0

Tôi đã sửa. Tuy nhiên, tôi chưa bao giờ thấy bất cứ ai sử dụng điều đó (hãy để một mình xem các tập tin đó trong tự nhiên). – Joey

5

XML không phải là định dạng để lưu trữ hình ảnh, không phải dữ liệu nhị phân. Tôi nghĩ tất cả phụ thuộc vào cách bạn muốn sử dụng những hình ảnh đó. Nếu bạn đang ở trong một ứng dụng web và muốn đọc chúng từ đó và hiển thị chúng, tôi sẽ lưu trữ các URL. Nếu bạn cần gửi chúng đến một điểm cuối web khác, tôi sẽ tuần tự hóa chúng, thay vì kiên trì theo cách thủ công trong XML. Hãy giải thích kịch bản là gì.

4

Tôi luôn chuyển đổi dữ liệu byte thành mã hóa Base64 và sau đó chèn hình ảnh.

Đây cũng là cách Word thực hiện, cho các tệp XML của nó (không phải từ đó là một ví dụ tốt về cách làm việc với XML: P).

2

Dưới đây là một số mã được lấy từ Kirk Evans Blog minh họa cách mã hóa hình ảnh trong 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(); 
Các vấn đề liên quan