2011-04-07 82 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); 
}