Почему «Данные на корневом уровне недействительны. Строка 1, позиция 1. «для XML-документа?

Я использую стороннюю DLL, которая передает XML-документ через Интернет.

Почему DLL выбрасывает следующее исключение?

Данные на корневом уровне недействительны. Строка 1, позиция 1. (см. Ниже полный текст исключения.)

Вот первые несколько строк XML-документа:

  
8a5f6d56-d56d-4b7b-b7bf-afcf89cd970d 101 3.0.2

Исключение:

 System.ApplicationException was caught Message=Unexpected exception. Source=FooSDK StackTrace: at FooSDK.RequestProcessor.Send(String SocketServerAddress, Int32 port) at Foo.ExecuteRequest(Int32 messageID, IPayload payload, Provider prov) at Foo.SendOrder(Int32 OrderNo) InnerException: System.Xml.XmlException LineNumber=1 LinePosition=1 Message=Data at the root level is invalid. Line 1, position 1. Source=System.Xml SourceUri="" StackTrace: at System.Xml.XmlTextReaderImpl.Throw(Exception e) at System.Xml.XmlTextReaderImpl.Throw(String res, String arg) at System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace() at System.Xml.XmlTextReaderImpl.ParseDocumentContent() at System.Xml.XmlTextReaderImpl.Read() at System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace) at System.Xml.XmlDocument.Load(XmlReader reader) at System.Xml.XmlDocument.LoadXml(String xml) at XYZ.RequestProcessor.GetObjectFromXML(String xmlResult) at XYZ.RequestProcessor.Send(String SocketServerAddress, Int32 port) InnerException: 

    В конце концов я понял, что существует исключение байтовой метки и удалено с помощью этого кода:

      string _byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble()); if (xml.StartsWith(_byteOrderMarkUtf8)) { var lastIndexOfUtf8 = _byteOrderMarkUtf8.Length-1; xml = xml.Remove(0, lastIndexOfUtf8); } 

    Я могу дать вам два совета:

    1. Кажется, вы используете «LoadXml» вместо метода «Загрузить». В некоторых случаях это помогает мне.
    2. У вас проблема с кодировкой. Не могли бы вы проверить кодировку XML-файла и записать его?

    Удалить все до

    Иногда есть некоторые «невидимые» (невидимые во всех текстовых редакторах). Некоторые программы добавляют это.

    Это называется спецификацией, вы можете прочитать об этом здесь: https://en.wikipedia.org/wiki/Byte_order_mark#Representations_of_byte_order_marks_by_encoding

    если вы используете XDocument.Load(url); для извлечения xml из другого домена, возможно, что хост отклонит запрос и возвращает и непредвиденный (не-xml) результат, который приводит к описанному выше XmlException

    См. Мое решение этой возможности здесь: XDocument.Load (feedUrl) возвращает «Данные на корневом уровне недействительны. Строка 1, позиция 1.»

    Давайте будем гением компьютера.