Carregar Xmldocument da matriz de bytes (opcionalmente contendo caracteres BOM)
-
25-09-2019 - |
Pergunta
Eu já vi várias postagens aqui sobre o carregamento de documentos XML de alguma fonte de dados em que os dados possuem o preâmbulo proprietário UTF-8 da Microsoft (por exemplo, Este).
No entanto, não consigo encontrar uma solução elegante (e funcionando!) Que não envolve disputar personagens de bombeiros manualmente.
Por exemplo, existe este exemplo:
byte[] b = System.IO.File.ReadAllBytes("c:\\temp_file_containing_bom.txt");
using (System.IO.MemoryStream oByteStream = new System.IO.MemoryStream(b)) {
using (System.Xml.XmlTextReader oRD = new System.Xml.XmlTextReader(oByteStream)) {
System.Xml.XmlDocument oDoc = new System.Xml.XmlDocument();
oDoc.Load(oRD);
Console.WriteLine(oDoc.OuterXml);
Console.ReadLine();
}
}
... mas ainda continua lançando a exceção "dados inválidos".
Meu problema é que tenho uma enorme matriz de bytes que as vezes contém o nascido e às vezes não. Eu preciso carregá -lo no XMLDocument. E não acredito que sou eu quem tem que cuidar dos bytes "ajudantes".
Solução
Essa BOM não é mais 'proprietária'. Está escrito nas especificações XML. Somente a versão antiga do Java (1.4) tem um problema com ele. É muito engraçado se você tem a tecnologia MS explodindo.
Use um fluxo de entrada em buffer para filtrar o Bom, pressionando o primeiro caractere, se não for o primeiro caractere da sequência BOM.