Загрузить XMLDocument из байтового массива (необязательно содержащего символы спецификации) - PullRequest
2 голосов
/ 03 февраля 2010

Я видел несколько постов здесь на SO о загрузке XML-документов из какого-либо источника данных, где данные имеют собственную преамбулу Microsoft UTF-8 (например, эта ).
Тем не менее, я не могу найти элегантное (и работающее!) Решение, которое не предусматривает ручного удаления символов спецификации.

Например, есть этот пример :

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();
    }
}

... но он по-прежнему выдает исключение «неверные данные».

Моя проблема в том, что у меня есть огромный массив байтов, который иногда содержит спецификацию, а иногда - нет. Мне нужно загрузить его в XMLDocument. И я не верю, что я тот, кто должен заботиться о «вспомогательных» байтах.

1 Ответ

1 голос
/ 03 февраля 2010

Эта спецификация больше не является «проприетарной». Это написано в спецификации XML. Только старая версия Java (1.4) имеет проблемы с ней. Это довольно забавно, если у тебя взрываются технологии MS.

Используйте буферизованный входной поток для фильтрации спецификации, сдвигая назад первый символ, если это не первый символ последовательности спецификации.

...