Reading BinHex encoded data out of XmlDocument

| No Comments | No TrackBacks

It's surprisingly tricky to get BinHex encoded data out of XmlDocument tree in .NET 1.X. XmlConvert class, which apparently has to support such conversions has a method FromBinHexString(), but weird - it only public for .NET Compact Framework. It's internal for regular .NET Framework. It's obvious that lots of .NET functionality isn't supported in .NET Compact Framework, but this is first time I see anything that .NET CF implements and .NET doesn't. Hmm, and in the forthcoming .NET 2.0 it's the same, do I miss something? Anyway, here is a workaround.

XmlTextReader can handle BinHex data just fine. So all you need is to get BinHex data out of XmlDocument along with containing element as string and read it with XmlTextReader:

XmlDocument doc = new XmlDocument();
doc.Load("foo.xml");
XmlNode dataNode = doc.SelectSingleNode("/data");
XmlTextReader r = new XmlTextReader(new StringReader(dataNode.OuterXml));
r.MoveToContent();
do 
{
  byte[] buf  = new byte[1024];
  int bytesRead = r.ReadBinHex(buf, 0, buf.Length);
  string data = new string(Encoding.UTF8.GetChars(buf, 0, bytesRead));
  Console.WriteLine(data);
} while (r.Name == "data");

Related Blog Posts

No TrackBacks

TrackBack URL: http://www.tkachenko.com/cgi-bin/mt-tb.cgi/487

Leave a comment