28

インターネット経由で XML ドキュメントを送信するサードパーティの DLL を使用しています。

DLL が次の例外をスローするのはなぜですか?

ルート レベルのデータは無効です。行 1、位置 1。 (完全な例外テキストについては、以下を参照してください。)

XML ドキュメントの最初の数行を次に示します。

<?xml version="1.0" encoding="utf-8"?> <REQUEST>   <HEADER>
    <REQUESTID>8a5f6d56-d56d-4b7b-b7bf-afcf89cd970d</REQUESTID>
    <MESSAGETYPE>101</MESSAGETYPE>
    <MESSAGEVERSION>3.0.2</MESSAGEVERSION>

例外:

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:
4

5 に答える 5

50

I eventually figured out there was a byte mark exception and removed it using this code:

 string _byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
    if (xml.StartsWith(_byteOrderMarkUtf8))
    {
        var lastIndexOfUtf8 = _byteOrderMarkUtf8.Length-1;
        xml = xml.Remove(0, lastIndexOfUtf8);
    }
于 2014-07-01T14:51:35.657 に答える
12

私はあなたに2つのアドバイスをすることができます:

  1. 「Load」メソッドの代わりに「LoadXml」を使用しているようです。場合によっては、それが役に立ちます。
  2. エンコードに問題があります。XMLファイルのエンコーディングを確認して書き込めますか?
于 2013-07-30T12:48:21.887 に答える
3

前にすべて削除<?xml version="1.0" encoding="utf-8"?>

場合によっては、「見えない」ものがあります (すべてのテキスト エディターで表示されるわけではありません)。これを追加するプログラムもあります。

これは BOM と呼ばれ、詳細についてはこちらをご覧ください: https://en.wikipedia.org/wiki/Byte_order_mark#Representations_of_byte_order_marks_by_encoding

于 2016-12-07T20:49:32.733 に答える
1

を使用XDocument.Load(url);して別のドメインから xml を取得している場合、ホストが要求を拒否し、予期しない (xml 以外の) 結果を返し、上記の XmlException が発生する可能性があります。

ここで、この不測の事態に対する私の解決策を参照してください: XDocument.Load(feedUrl) は、「ルート レベルのデータが無効です。行 1、位置 1」を返します。

于 2014-11-12T07:33:43.860 に答える