2011-04-07 124 views
21

我有xml我得到的是字節數組,什麼是最好的方式來獲取xml字符串?我tryng使用的XmlTextReader和MemoryStream的,但沒有成功..c#從字節數組創建xml

+1

你從哪裏得到字節數組?你知道使用的編碼嗎? – 2011-04-07 13:51:19

+0

XML包含base64編碼數據。 – hs2d 2011-04-07 13:54:58

+0

我的意思是XML文檔的[字符編碼](http://en.wikipedia.org/wiki/Character_encoding)。 – 2011-04-07 13:56:04

回答

45
XmlDocument doc = new XmlDocument(); 
string xml = Encoding.UTF8.GetString(buffer); 
doc.LoadXml(xml); 

OR

XmlDocument doc = new XmlDocument(); 
MemoryStream ms = new MemoryStream(buffer); 
doc.Load(ms); 

This assum如果您的數據具有UTF8編碼,這通常是XML。另外buffer這裏是字節數組。

+6

好的答案,雖然MemoryStream是IDisposable,所以不要忘記把它包裝在一個使用塊! :) – firefox1986 2011-04-07 13:58:24

+1

@ firefox1986不需要。 http://stackoverflow.com/a/234257/440502 – Aliostad 2012-12-25 20:45:13

+0

因爲字節順序標記(BOM)我發現這個過載更有用(謝謝Jon Skeet) 'MemoryStream ms = new MemoryStream(buffer,true);' – bkwdesign 2017-03-14 20:09:33

1

基於編碼,你可以做

string xmlString = System.Text.UTF8Encoding.UTF8.GetString(bytes); 

和使用字符串

XmlTextReader reader = new XmlTextReader(new StringReader(xmlString)); 
+0

使用UTF8類,而不是ASCII ... – NKCSS 2011-04-07 13:52:08

+0

Ooops ... GetBytes接受一個字符串並給出一個字節數組。 GetString接收一個字節數組並給出一個字符串。 FTFY。 – 2011-04-07 14:15:28

0

看看System.Text.Encoding.UTF8班。它應該讓你把你的字節數組轉換成一個UTF8字符串。

+0

什麼如果它不是UTF8? – 2011-04-07 13:51:49

+0

請參閱此處的[XML編碼默認值](http://www.opentag.com/xfaq_enc.htm)頁面。 UTF8是大多數情況下的正確假設。 – NKCSS 2011-04-07 13:53:22

+1

不過,我想你應該在你的回答中留下一個提示。 – 2011-04-07 13:54:26

3

假設你的XML是默認的'UTF8'編碼,你可以做這樣的事情;

string xml = System.Text.UTF8Encoding.UTF8.GetString(bytes); 
System.Xml.XmlDocument xdoc = new System.Xml.XmlDocument().LoadXml(xml); 

或者這個;

XmlDocument doc = new XmlDocument(); 
using (MemoryStream ms = new MemoryStream(buffer)) 
{ 
    doc.Load(ms); 
}