2011-04-07 53 views
21

tengo xml lo que obtengo como byte array, ¿cuál es la mejor manera de sacarle la cadena xml? Estaba tryng utilizar XmlTextReader y MemoryStream pero sin éxito ..C# create xml from byte array

+1

¿De dónde obtienes la matriz de bytes? ¿Conoces la codificación utilizada? –

+0

XML contiene datos codificados en base64 .. – hs2d

+0

Quise decir la [codificación de caracteres] (http://en.wikipedia.org/wiki/Character_encoding) del documento XML. –

Respuesta

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

O

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

Este assum es que sus datos tienen codificación UTF8, que es la habitual para XML. También buffer aquí está la matriz de bytes.

+6

¡Buena respuesta, aunque el MemoryStream es IDisposable, así que no olvide envolverlo en un bloque de uso! :) – firefox1986

+1

@ firefox1986 no es necesario. http://stackoverflow.com/a/234257/440502 – Aliostad

+0

debido a una marca de orden de bytes (BOM) Encontré esta sobrecarga más útil (gracias a Jon Skeet) 'MemoryStream ms = new MemoryStream (buffer, true);' – bkwdesign

1

Sobre la base de la codificación, puede hacerlo

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

y utilizar la cadena

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

Usa la clase UTF8, no ASCII ... – NKCSS

+0

Ooops ... GetBytes toma una cadena y da una matriz de bytes. GetString toma una matriz de bytes y da una cadena. FTFY. –

0

Echa un vistazo a la clase System.Text.Encoding.UTF8. Debería permitirle convertir su matriz de bytes en una cadena UTF8.

+0

What si no es UTF8? –

+0

Consulte la página [Valores predeterminados de codificación XML] (http://www.opentag.com/xfaq_enc.htm) aquí. UTF8 es la suposición correcta en la mayoría de los casos. – NKCSS

+1

Aún así, creo que debería tener una nota al respecto en su respuesta. –

3

Suponiendo que su xml está en la codificación predeterminada 'UTF8', podría hacer algo como esto;

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

O esto;

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