2011-05-23 108 views
2

我將XML作爲字節數組(byte [])存儲在數據庫中。現在,我需要從我成功地在做數據庫的字節數組,並通過它的XDocument類似如下:byte [] to XML with .NET/C#

public Dictionary<string, string> ReadFromByte(byte[] UserData, string toplevelnode, string firstattribute, string secondattribute) 
     { 
      XDocument doc = XDocument.Load(UserData); 
      Dictionary<string, string> dictionary = doc.Descendants(toplevelnode).ToDictionary(x => x.Attribute(firstattribute).Value, 
                   x => x.Attribute(secondattribute).Value); 
      return dictionary; 
     } 

如果我通過到的XDocument XML格式的服務器上的文件時,此代碼工作正常。但是,如果我傳遞一個byte []數組,它將不起作用。

任何提示我應該如何conert byte []數組回到XML將不勝感激。

謝謝。

+1

你是如何在數據庫中存儲xml文檔的?使用序列化還是僅使用xml內容的字節? – crypted 2011-05-23 10:54:16

+0

您應該能夠將db字段值寫入MemoryStream並將該流饋送到XDocument。 – faester 2011-05-23 10:57:22

+0

是的,你如何從數據庫中獲取XML取決於你如何在第一時間得到它。你需要告訴我們你是如何將它加入數據庫的。 – 2011-05-23 10:58:42

回答

5
using (var stream = new MemoryStream(UserData, false)) 
    { 
    var doc = Xdocument.Load(stream); 

    ... 
    } 

正如@ INT3問,我們應該知道,你用來存儲在數據庫中的文檔enocoding(UTF8/16等)。

+0

我已經將XML寫入如下的內存流中:MemoryStream ms = new MemoryStream(); ms.Position = 0; XmlWriter writer = new XmlTextWriter(ms,Encoding.UTF8);然後將內存流讀入如下的字節數組:byte [] biteArray = new byte [ms.Length]; ms.Read(biteArray,0,(int)ms.Length); – cycero 2011-05-23 11:12:58

+0

好吧,我的答案應該工作;因爲數據庫中的文檔應該以<?xml version =「1.0」encoding =「UTF-8」?>開頭,並且XDocument.Load會正確讀取它。 – 2011-05-23 11:16:30

+0

如果我喜歡你,直接將流傳遞給XDocument,我得到「無法將流轉換爲字符串。」如果我喜歡以下內容:Xdocument.Load(stream).ToString(),我會得到找不到文件'c:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ System.IO.MemoryStream'。 – cycero 2011-05-23 11:24:40